Search code examples
javaswingevent-dispatch-thread

How to pass results from EDT back to a different thread?


I have the following use-case:

I have code executing in Thread A (not EDT). Then I want to ask the user a question, but this must be done on the EDT as it involves Swing code (opening a dialog etc). Finally, I want to pass the user's answer back to Thread A, so it can continue.

I'm struggling to find a good way to pass the user's answer back to Thread A. How do you do this?


Solution

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