2 回答

TA貢獻1804條經(jīng)驗 獲得超2個贊
我希望這cs = ss.accept();
是阻塞的呼叫。這將一直阻塞,直到客戶端連接到服務器。您在按下按鈕時運行它,因為在您的按鈕操作代碼中,您構造了 a BackGroundCom
,并且該對象的構造函數(shù)調用startServer
,它直接執(zhí)行此accept()
行。
似乎您正在嘗試設置BackGroundCom
對象,以便它在后臺線程中發(fā)生的事情,但我上面所描述的一切都發(fā)生在您創(chuàng)建和運行線程之前。也許您想要做的是將startServer
調用移動到對象的run()
方法中BackGroundCom
。我沒有在 中看到run()
方法BackGroundCom
,盡管它實現(xiàn)了Runnable
. 我認為它在代碼中更進一步。沒有它,這段代碼甚至無法編譯。

TA貢獻1942條經(jīng)驗 獲得超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
}
添加回答
舉報