нет
Нет
Используйте Future<T>
и, возможно, Callable<T>
и ExecutorService
. Future
в основном является точным программным выражением того, что вы хотите: обещание будущего ответа и возможность блокировки до получения ответа . Будущее также автоматически оборачивает и представляет вам целый сложный фарраго потенциальных кошмаров и сложностей параллелизма в несколько четко определенных исключений. Это - хорошая вещь , потому что она заставляет вас иметь дело с ними, когда решение по собственной инициативе, вероятно, никогда не раскроет их, за исключением какого-то ненормального, трудно диагностируемого поведения.
public void askForAnAnswer() throws TimeoutException, InterruptedException, ExecutionException
{
Future<String> theAnswerF = getMeAnAnswer();
String theAnswer = theAnswerF.get();
}
public Future<String> getMeAnAnswer()
{
Future<String> promise = null;
// spin off thread/executor, whatever.
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
host = JOptionPane.showInputDialog("Enter host name: ");
}
});
// ... to wrap a Future around this.
return promise;
}
Для вашего конкретного случая вы, вероятно, можете использовать SwingWorker , который реализует Future
. Вместо дубликата, пожалуйста, посмотрите на этот ТАК * вопрос .