我有一个简单的服务器客户端程序设置。用户开始监听连接,并出现一个对话框,并显示“正在侦听连接”和一个取消按钮。如果他点击取消,则关闭服务器套接字。这很好。让ServerSocket接受连接,想连接时关闭对话框
我想要的是使“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());
}
如果'listenThread'什么都不做,只能使用监听器,为什么不在socket套接字后把它杀掉呢? – noMAD
您是否尝试过使用AsyncTask或类似的东西?我想你不应该接受gui线程上的套接字... – Fildor