如何将结果从EDT传递回另一个线程?

Eri*_*uer 8 java swing event-dispatch-thread

我有以下用例:

我在线程A(不是EDT)中执行代码.然后我想问用户一个问题,但这必须在EDT上完成,因为它涉及Swing代码(打开一个对话框等).最后,我想将用户的答案传递给线程A,因此它可以继续.

我很难找到一个好方法将用户的答案传递给线程A.你怎么做到这一点?

jta*_*orn 18

FutureTask<Integer> dialogTask = new FutureTask<Integer>(new Callable<Integer>() {
  @Override public Integer call() {
    return JOptionPane.showConfirmDialog(...);
  }
});
SwingUtilities.invokeLater(dialogTask);
int result = dialogTask.get();
Run Code Online (Sandbox Code Playgroud)

  • @EricLindauer - 完全按照您的预期处理所有内容.异常将在ExecutionException中包含的原始线程中抛出(有关更多详细信息,请参阅`Future.get()`). (2认同)