【发布时间】:2017-05-22 08:52:40
【问题描述】:
在我的应用程序中,我必须保存一个需要很长时间的 JavaFX UI。在此保存期间,我必须显示一个进度对话框,告诉用户当时发生了什么。
我已经读到应该使用 Task 而不是 JavaFX 线程来运行繁重的任务。但是,由于以下两个原因,这对我来说是不可能的:
1- 繁重的任务包括 JavaFX 确认对话框弹出窗口,如果不被 JavaFX 线程调用,有时会在 MAC 上出现错误。
2- 保存方法必须返回一个布尔值来判断保存是否正常。而这个保存方法是由 JavaFX 线程触发的。这意味着 JavaFX 线程必须返回布尔变量,并且必须等待 Task 完成才能执行此操作。
遗憾的是,JavaFX UI 集成在 Swing UI 中,这使得使用起来更加困难。
【问题讨论】:
-
“繁重的任务包括 JavaFX 确认对话框弹出窗口,如果不被 JavaFX 线程调用,有时会在 MAC 上出现错误”。无论您在什么平台上运行,对话框必须显示在 FX 应用程序线程上。不过,这并不妨碍您在另一个线程上运行后台工作。对于 2. 使用
Task<Boolean>并使用setOnSucceeded处理程序来处理结果。
标签: multithreading javafx progress-bar