我想自动化一个在线游戏。它在仅基于终端的情况下有效。但是我想添加一个JavaFX UI,现在我不知道在到达某个LocalDateTime之前将Thread.waits放在哪里。 JavaFX在哪里等待事件(例如按钮单击等),我可以覆盖该方法吗?还是有办法为javaFX创建自定义LocalDateTime事件和侦听器?
如果我在initialize()中添加Thread.wait,直到达到特定的LocalDateTime时,整个场景才会出现。
答案 0 :(得分:2)
如果您希望在某个预定时刻触发事件,但是希望应用程序的用户界面对用户的操作保持响应,则需要一个后台线程。您几乎应该永远不要休眠应用程序的GUI线程,因为这会使您的应用程序无响应,并且似乎已崩溃。为了娱乐,请尝试使用错误的方法:将Drop a Thread.sleep
call插入GUI代码以查看其如何暂时冻结应用程序。
了解有关concurrency的信息。从Oracle Tutorial开始,一直到Java Concurrency in Practice等人Goetz每年都要逐步阅读圣经。
Executors框架旨在简化线程。具体来说,您将需要ScheduledExecutorService
类。堆栈溢出已经对此进行了很多次讨论。搜索以了解更多信息。
并了解如何进行properly interact with the GUI thread from a background thread。
如类文档中所述,切勿使用LocalDateTime
来跟踪时刻。请暂时使用Instant
,OffsetDateTime
或ZonedDateTime
。对于小时-分钟-秒的时间跨度,请使用Duration
。 Duration
类提供诸如toMinutes
,toSeconds
之类的方法,您可以将其结果作为your delay馈送到ScheduledExecutorService
。所有这些类在Stack Overflow上已经讨论了很多次。搜索以了解更多信息。