0

我设置了一个简单的服务器-客户端程序。用户开始侦听连接,并出现一个对话框,其中包含消息“正在侦听连接”和一个取消按钮。如果他点击取消,服务器套接字将关闭。没关系。

我想要的是在建立连接时使“正在侦听...”对话框消失。

目前,ListenDialog 是可运行的,因为我尝试将其accept()放入其中,或者while(true), if socket != null, dispose();...没有任何效果。对话框设置为模态,否则accept()永远不会绘制块和对话框 GUI(即取消按钮);即使该run()方法在停止阻塞之前也不会运行accept(),即使它看起来应该在一个单独的线程中。

所以,我可以通过放入dispose()对话框的run()方法并使对话框成为非模态对话框来获得我想要的关闭功能......但它永远不会绘制 GUI,因此无法使用取消按钮。我可以通过使对话框模态来获取我的 GUI 和取消按钮,但即使在accept()停止阻止该run()方法之后似乎也没有做任何事情(即对话框只是坐在那里直到手动关闭,甚至run()代码都没有播放。)

请告诉我有一些明显的东西我错过了!

ListenDialog listener = new ListenDialog();

Thread listenThread = new Thread(listener);
listenThread.start();

try {
    socket = server.accept();
    listener.dispose();
} catch(IOException e1) {
    addMessage("Accept Failed: " + e1.getMessage());
}
4

1 回答 1

0

好吧,我不是 100% 确定这个解决方案是如何工作的,或者与我尝试过的任何其他事情的重要区别是什么......但就是这样。

now的构造函数ListenDialog包含为自己创建一个新线程。该run()方法包含accept()调用,后跟dispose()try/catch 块外部。上面显示的所有代码(除了 new 的创建ListenDialog)都已移至ListenDialog类中。

于 2012-09-26T20:34:41.123 回答