Как запустить диалог ввода свинга в EDT и получить возвращаемое значение? - PullRequest
0 голосов
/ 30 апреля 2018

Хорошо, у меня следующая проблема, я написал простой клиент с графическим интерфейсом для приложения чата, и мне нужно попросить пользователя ввести его имя пользователя с помощью JOptionPane InputDialog. Теперь это диалоговое окно должно появиться, когда сервер отправляет определенное уведомление. Таким образом, диалог начнется со второго потока, , а не из потока EDT.

Я попытался запустить диалог в потоке EDT, выполнив ...

EventQueue.invokeAndWait(new Runnable()
{
    @Override public void run()
    {
        JOptionPane.showInputDialog(null, "Choose a username:",
            "Username selection", JOptionPane.PLAIN_MESSAGE);
    }
});

Заголовок моей функции, который содержит данный код и должен вернуть пользовательский ввод:

public String showNameInputDialog()

Моя проблема в том, что я не могу получить пользовательский ввод (не могу использовать локальную переменную) из диалога, потому что я запустил его во внутреннем классе. Итак, мой вопрос, есть ли возможность получить пользовательский ввод и запустить диалоговое окно еще в EDT?

1 Ответ

0 голосов
/ 30 апреля 2018

Вы можете использовать переменную контейнера для захвата результата:

final String[] resultContainer = new String[1];
EventQueue.invokeAndWait(new Runnable()
{
    @Override public void run()
    {
        resultContainer[0] = JOptionPane.showInputDialog(null, "Choose a username:",
            "Username selection", JOptionPane.PLAIN_MESSAGE);
    }
});
String result = resultContainer[0];
// ... do something with result.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...