2 回答
TA貢獻1804條經驗 獲得超2個贊
我希望這cs = ss.accept();是阻塞的呼叫。這將一直阻塞,直到客戶端連接到服務器。您在按下按鈕時運行它,因為在您的按鈕操作代碼中,您構造了 a BackGroundCom,并且該對象的構造函數調用startServer,它直接執行此accept()行。
似乎您正在嘗試設置BackGroundCom對象,以便它在后臺線程中發生的事情,但我上面所描述的一切都發生在您創建和運行線程之前。也許您想要做的是將startServer調用移動到對象的run()方法中BackGroundCom。我沒有在 中看到run()方法BackGroundCom,盡管它實現了Runnable. 我認為它在代碼中更進一步。沒有它,這段代碼甚至無法編譯。
TA貢獻1942條經驗 獲得超3個贊
史蒂夫是對的。ServerSocket.accept();方法將阻塞,直到建立連接。你必須把它放在另一個里面Thread,這樣它就不會阻塞EDT(Event Dispatching Thread). EDT 是您的 GUI 運行的地方。
public BackGroundCom(int port) {
this.port = port;
dataToSend = true;
missileOutgoing = 100;
new Thread(() -> (startServer()).start(); // run in new thread
}
添加回答
舉報
