如何在EDT中运行swing输入对话框并获取返回值?

时间:2018-04-30 18:55:49

标签: java multithreading swing

好的,我有以下问题,我为聊天应用程序编写了一个简单的GUI客户端,我需要在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 :(得分:0)

您可以使用容器变量来捕获结果:

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.