我想自动化在线游戏。虽然它只是基于终端的,但它仍然有用。但我想添加一个JavaFX UI,现在我不知道在到达某个LocalDateTime之前将Thread.waits放在哪里。 JavaFX在哪里等待它的事件(如按钮点击,......),我可以覆盖该方法吗?或者有没有办法为javaFX创建自定义LocalDateTime事件和侦听器?
如果我在initialize()中添加一个Thread.wait,则在达到某个LocalDateTime之前不会出现整个场景。
如果您希望在某个预定时刻触发事件,但您希望应用程序的用户界面保持对用户操作的响应,那么您需要一个后台线程。您几乎不应该睡眠应用程序的GUI线程,因为这会使您的应用程序无响应并且似乎崩溃了。为了好玩,请以错误的方式尝试:Drop a Thread.sleep
call进入您的GUI代码,看看它如何暂时冻结您的应用程序。
了解concurrency。从Oracle Tutorial开始,继续努力,最终每年阅读Java Concurrency in Practice等人的圣经Goetz。
构建Executors框架是为了使线程更容易。具体来说,你会想要ScheduledExecutorService
类。 Stack Overflow上已经多次介绍过这个问题。搜索以了解更多信息。
并了解如何properly interact with the GUI thread from a background thread。
永远不要使用LocalDateTime
来跟踪片刻,如课程文档中所述。暂时使用Instant
,OffsetDateTime
或ZonedDateTime
。对于小时 - 分钟 - 秒的时间跨度,使用Duration
。 Duration
类提供诸如toMinutes
,toSeconds
之类的方法,其结果可以作为your delay提供给ScheduledExecutorService
。 Stack Overflow上已经多次覆盖了所有这些类。搜索以了解更多信息。