gpt4 book ai didi

JavaFX 在线程任务完成后显示对话

转载 作者:行者123 更新时间:2023-12-01 22:40:29 25 4
gpt4 key购买 nike

我需要显示对话窗口

 Stage dialog = new Stage();
dialog.initStyle(StageStyle.UTILITY);
Scene scene = new Scene(new Group(new Text(25, 25, "All is done!")));
dialog.setScene(scene);
dialog.showAndWait();

我的线程完成任务后

Thread t = new Thread(new Runnable() {
@Override
public void run() {
doSomeStuff();
}

});

我已经尝试过

Thread t = new Thread(new Runnable() {
@Override
public void run() {
doSomeStuff();
}

});
t.start();
t.join();
Stage dialog = new Stage();
dialog.initStyle(StageStyle.UTILITY);
Scene scene = new Scene(new Group(new Text(25, 25, "All is done!")));
dialog.setScene(scene);
dialog.showAndWait();
}

但此应用在 doSomeStuff() 完成之前不会响应

最佳答案

t.join() 是一个阻塞调用,因此它将阻塞 FX 应用程序线程,直到后台线程完成。这将阻止 UI 被重新绘制或响应用户输入。

做你想做的事情的最简单方法是使用 Task :

Task<Void> task = new Task<Void>() {
@Override
public Void call() throws Exception {
doSomeStuff();
return null ;
}
};
task.setOnSucceeded(e -> {
Stage dialog = new Stage();
dialog.initStyle(StageStyle.UTILITY);
Scene scene = new Scene(new Group(new Text(25, 25, "All is done!")));
dialog.setScene(scene);
dialog.showAndWait();
});
new Thread(task).start();

一种低级(即不使用 JavaFX 提供的高级 API)方法是从后台线程安排 FX 应用程序线程上对话框的显示:

Thread t = new Thread(() -> {
doSomeStuff();
Platform.runLater(() -> {
Stage dialog = new Stage();
dialog.initStyle(StageStyle.UTILITY);
Scene scene = new Scene(new Group(new Text(25, 25, "All is done!")));
dialog.setScene(scene);
dialog.showAndWait();
});
});
t.start();

我强烈建议使用第一种方法。

关于JavaFX 在线程任务完成后显示对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58500133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com