我有SwingWorker
打开ServerSocket
,然后在服务器套接字上调用.accept()
。大多数情况下,线程在调用accept()
时阻塞。在某些时候我想取消线程。问题是工作线程被accept()
的调用阻止。是否有一种机制可以从此调用中“解除阻塞”并调用一些关闭代码?
目前,我正在呼叫mySwingWorker.cancel(true)
,并使用我的PropertychangeListener
收听有关更改内容的信息。触发后,我会检查DONE
状态,然后在尝试呼叫CancellationException
时检查mySwingworker.get()
。
奇怪的是,即使在CancellationException
被捕获之后,我仍然可以连接到工作人员打开的套接字。
答案 0 :(得分:4)
关闭ServerSocket。这将解除带有异常的accept()。
如果你想要一个更干净的解决方案,设置一个布尔值,将一个Socket连接到监听端口,并让你的accept()循环在每次接受连接时检查布尔值。
或者,设置一个accept()超时,设置一个布尔值,并让accept()循环在每次超时时检查布尔值。