让ServerSocket接受连接,连接时要关闭对话框

时间:2012-09-26 14:52:01

标签: java multithreading sockets runnable

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

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

目前ListenDialog是一个可运行的,因为我已经尝试将accept()放在那里,或者while(true), if socket != null, dispose();...没有任何效果。该对话框设置为Modal,因为否则不会绘制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());
}

1 个答案:

答案 0 :(得分:0)

好吧,我不是百分之百地确定这个解决方案是如何工作的,或者与我试过的其他任何东西有什么重要区别......但是现在就是这样。

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