【问题标题】:Wait in other thread for answer from Messagebox在其他线程中等待来自 Messagebox 的回答
【发布时间】:2013-05-07 11:09:03
【问题描述】:

我有一个工作(在我的例子中是Synchronization.java),它带有静态方法,可以从服务器上传/下载一些数据。在某些情况下,我想打开一个 (JavaFX) MessageDialog (MessageBox) 并询问用户他是否想做某项活动(答案:是/否)。要打开此 MessageDialog,我需要主窗口和舞台上的控制器。此外,当我在另一个线程上时,我可以使用Platform#runlater 在 UI 线程中打开 MessageBox。 Synchronization.java 应该等到我从 MessageDialog 得到用户的响应(在另一个线程中)——即在我得到用户的响应之后,应该调用相应的方法。 p>

编辑:我找到了一个我添加为答案的解决方案。但是,我并不完全相信这是解决我的问题的最佳方法。如果有人有建议,谢谢分享!

【问题讨论】:

  • 您是如何尝试解决问题的?你被困在哪里了?
  • 我尝试了上述两个建议。两者对我来说看起来都很不合适,并且没有真正起作用......我更新了上面的线程以描述我目前正在尝试的内容。谢谢。
  • 如果您提供一些代码来显示您的问题,会更容易帮助您

标签: java multithreading javafx messagebox


【解决方案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;
    }
}

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多