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
}
添加回答
举报