非模态JDialog不显示内容?

时间:2012-01-17 07:26:51

标签: java swing

我正在构建一个从客户端接收套接字连接的服务器程序。当程序启动服务器时,我想在等待时显示一个显示“等待连接...”的对话框。收到连接后,我想以编程方式关闭窗口。因为我不想在等待套接字连接时阻止程序的执行,所以我使用了非模态对话框来显示消息。这是有效的,除了对话框不显示我想要的文本。对话框标题显示正常,但消息窗格不显示。为什么是这样?我已经尝试了几种不同的方法来实现这一点,包括下面的代码,但都无济于事。

public class AboutDialog extends JDialog implements ActionListener 
{
    public AboutDialog(JFrame parent, String title, String message) 
    {
        super(parent, title, false);

        if (parent != null) 
        {
            Dimension parentSize = parent.getSize(); 
            Point p = parent.getLocation(); 
            setLocation(p.x + parentSize.width / 4, p.y + parentSize.height / 4);
        }

        JPanel messagePane = new JPanel();
        messagePane.add(new JLabel(message));
        getContentPane().add(messagePane);

        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        pack(); 
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent e) 
    {
        setVisible(false); 
        dispose(); 
    }
}

为了防止我的解释不清楚,我将“等待连接...”传递给AboutDialog构造函数作为message参数。谢谢你的指导!

1 个答案:

答案 0 :(得分:2)

您可能无法在事件派发线程中打开(并关闭)对话框(使用主/侦听线程中的SwingUtilities.invokeLater())。

也就是说,拥有服务器应用程序的GUI可能不是一个好主意。服务器应用程序经常在无头服务器上运行,并且经常作为服务/守护进程启动。使用日志文件可能比使用GUI更好。