我有一個簡單的服務器客戶端程序設置。用戶開始監聽連接,並出現一個對話框,並顯示「正在偵聽連接」和一個取消按鈕。如果他點擊取消,則關閉服務器套接字。這很好。讓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