【发布时间】:2017-05-05 00:43:48
【问题描述】:
我编写了一个简单的 JavaFX 应用程序,它显然在 FX 应用程序线程上运行。应用程序需要在一个单独的线程(不是 FX 线程)上运行的无限循环中进行一些后台处理,我在其中调用 Platform.runLater() 来更新 FX 的 gui 控件固定间隔后应用。 如果我关闭 FX Gui 应用程序,后台线程会继续执行。
为了在 FX 线程终止后终止后台线程,我现在在后台线程的 while 循环中使用 fxThread.isAlive()。 这样一来,当 FX 线程在 while 循环条件变为 false 时终止时,后台线程就会自动终止。
这是一个糟糕的选择吗?完成相同任务的替代和有效方法是什么?
//imports
public class SimpleClockFX implements Application{
Thread fxThread;
//other variables
@Override
public void start(Stage primaryStage){
fxThread = Thread.currentThread();
//other stuff...
new Thread(()->{
//logic...
while(fxThread.isAlive()){
//logic...
Platform.runLater(()->{
//update gui controls
});
}
}).start();
}
【问题讨论】:
-
如何终止 FX 应用程序,以及如何启动后台线程?我也想你没有通过
thread.setDaemon(true) -
请在您的问题中发布更改,而不是在 cmets 中
-
主类正在实现 javafx.application.Application。在被覆盖的方法 start(Stage stage) 中,我将后台线程创建为: new Thread(()->{//logic here}).start();
-
实际上评论是在完成前按回车键意外发布的......所以:)
标签: java multithreading javafx terminate background-thread