我正在构建一个从客户端接收套接字连接的服务器程序。当程序启动服务器时,我想在等待时显示一个显示“等待连接...”的对话框。收到连接后,我想以编程方式关闭窗口。因为我不想在等待套接字连接时阻止程序的执行,所以我使用了非模态对话框来显示消息。这是有效的,除了对话框不显示我想要的文本。对话框标题显示正常,但消息窗格不显示。为什么是这样?我已经尝试了几种不同的方法来实现这一点,包括下面的代码,但都无济于事。
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参数。谢谢你的指导!
答案 0 :(得分:2)
您可能无法在事件派发线程中打开(并关闭)对话框(使用主/侦听线程中的SwingUtilities.invokeLater()
)。
也就是说,拥有服务器应用程序的GUI可能不是一个好主意。服务器应用程序经常在无头服务器上运行,并且经常作为服务/守护进程启动。使用日志文件可能比使用GUI更好。