我有一个类(在我的情况下是Synchronization.java)和静态方法,可以从服务器上传/下载一些数据。在某些情况下,我想打开一个( JavaFX )MessageDialog(MessageBox)并询问用户是否要进行某项活动(答案:是/否)。要打开这个MessageDialog,我需要主窗口和舞台上的控制器。此外,因为我在另一个线程上,我可以使用Platform#runlater
在UI线程中打开MessageBox。 Synchronization.java应该等到我从MessageDialog (在另一个线程中)获得用户的响应 - 即在我收到用户的响应后,应该调用相应的方法。
修改:我找到了一个解决方案,我将其添加为答案。但是,我并不完全相信这是解决我问题的最佳方法。如果有人有建议,谢谢分享!
答案 0 :(得分:1)
我用下面的代码解决了它。这有效,但我有感觉,有更好的方法......
public static boolean showMessageCheckToUpload() {
@SuppressWarnings({ "unchecked", "rawtypes" })
final FutureTask query = new FutureTask(new Callable() {
@Override
public Object call() throws Exception {
boolean uploadDisk = MessageBoxTwoChoicesController.showDialogBox(
stage, "Upload disk",
"Do you want to upload the current Disk to the server?", "Yes", "No");
return uploadDisk;
}
});
Platform.runLater(query);
try {
return (boolean) query.get();
} catch (InterruptedException | ExecutionException e) {
return false;
}
}