В моем Java-приложении с графическим интерфейсом Swing я хотел бы добиться следующего.
Работает не-GUI-поток, выполняющий некоторую работу.В какой-то момент этот поток требует ввода от пользователя, прежде чем он сможет продолжить.Затем я хотел бы внести некоторые изменения в GUI, дождаться определенного действия GUI (например, пользователь нажал кнопку OK), получить введенные данные из GUI в поток, не связанный с GUI, и позволить ему продолжить вычисления.
Оглядываясь вокруг, я нашел много информации о том, как инициировать выполнение (длительной) задачи из потока графического интерфейса Swing в другом потоке, но ничего о моей проблеме.
SwingUtilites.invokeAndWait
звучит так, как будто он выполняет свою работу, но сначала он принимает аргумент Runnable
вместо Callable
, поэтому нет простого способа вернуть результат, а во-вторых, это не такрешить проблему ожидания определенного события графического интерфейса.
Я понимаю, что мог бы придумать свое собственное решение, например, с помощью CountDownLatch
, но мне кажется, что проблема кажется достаточно частой для стандартного решения.
Итак, мои вопросы: действительно ли это частая проблема, и если да, есть ли решение в стандартной библиотеке / библиотеках?Если нет стандартного решения, как бы вы его решили?Если эта проблема возникает не часто, почему бы и нет?