我正在編寫一個JavaFX應用程序,並且我的對象擴展了Task以提供遠離JavaFX GUI線程的併發性。JavaFX任務線程不終止
我的主類看起來是這樣的:
public class MainApp extends Application {
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("Sample.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
public void handle(WindowEvent t) {
//I have put this in to solve the threading problem for now.
Platform.exit();
System.exit(0);
}
});
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
我的GUI控制樣品看起來像這樣(抽象略):
ExecutorService threadPool = Executors.newFixedThreadPool(2);
private void handleStartButtonAction(ActionEvent event) {
MyTask task = new MyTask();
threadPool.execute(task);
}
目前我的任務只是做一個睡眠和打印數字1通過10:
public class MyTask extends Task<String> {
@Override
protected String call() throws Exception {
updateProgress(0.1, 10);
for (int i=0;i<=10;i++) {
if (isCancelled()) {
break;
}
Thread.sleep(1000);
System.out.println(i);
updateProgress(i, 10);
}
return "Complete";
}
}
我有的問題是一旦任務完成它顯示爲t儘管任務啓動的線程繼續運行。所以,當我通過按下「X」右上角退出JavaFX應用程序時,JVM將繼續運行,並且我的應用程序不會終止。如果你看看我的主類,我已經把System.exit()看起來解決了這個問題,但我知道這不是正確的方法。
有人可以建議我需要做什麼終止我的子線程,什麼是接受的方式做到這一點?即檢查它們是否完整,然後例如終止。
感謝