Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在其他线程中等待Messagebox的答复_Java_Multithreading_Javafx_Messagebox - Fatal编程技术网

Java 在其他线程中等待Messagebox的答复

Java 在其他线程中等待Messagebox的答复,java,multithreading,javafx,messagebox,Java,Multithreading,Javafx,Messagebox,我有一个工作的类(在我的例子中是Synchronization.java),带有静态方法,可以从服务器上传/下载一些数据。在某些情况下,我想打开一个(JavaFX)消息对话框(MessageBox),询问用户是否想进行某项活动(回答:是/否)。要打开这个消息对话框,我需要主窗口和舞台上的控制器。此外,由于我在另一个线程上,我可以使用Platform#runlater在UI线程中打开MessageBox。Synchronization.java应该等待,直到我从MessageDialog(在另一个

我有一个工作的类(在我的例子中是Synchronization.java),带有静态方法,可以从服务器上传/下载一些数据。在某些情况下,我想打开一个(JavaFX)消息对话框(MessageBox),询问用户是否想进行某项活动(回答:是/否)。要打开这个消息对话框,我需要主窗口和舞台上的控制器。此外,由于我在另一个线程上,我可以使用
Platform#runlater
在UI线程中打开MessageBox。Synchronization.java应该等待,直到我从MessageDialog(在另一个线程中)获得用户的响应,也就是说,在我从用户那里得到响应之后,应该调用相应的方法


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

我用下面的代码解决了这个问题。这是可行的,但我觉得有更好的方法

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;
    }
}

我用下面的代码解决了它。这是可行的,但我觉得有更好的方法

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;
    }
}

你是如何试图解决这个问题的?你被困在哪里了?我尝试了上述两个建议。在我看来这两个都很不合适而且都不起作用。。。我更新了上面的线程来描述我目前正在尝试的内容。谢谢。如果您提供一些代码来显示您的问题,您会更容易帮助您。您是如何尝试解决此问题的?你被困在哪里了?我尝试了上述两个建议。在我看来这两个都很不合适而且都不起作用。。。我更新了上面的线程来描述我目前正在尝试的内容。谢谢。如果您提供一些代码来显示您的问题,您将更容易得到帮助