取消被Socket.Accept()阻止的SwingWorker?

时间:2014-09-03 21:26:02

标签: java multithreading sockets swingworker

我有SwingWorker打开ServerSocket,然后在服务器套接字上调用.accept()。大多数情况下,线程在调用accept()时阻塞。在某些时候我想取消线程。问题是工作线程被accept()的调用阻止。是否有一种机制可以从此调用中“解除阻塞”并调用一些关闭代码?

目前,我正在呼叫mySwingWorker.cancel(true),并使用我的PropertychangeListener收听有关更改内容的信息。触发后,我会检查DONE状态,然后在尝试呼叫CancellationException时检查mySwingworker.get()

奇怪的是,即使在CancellationException被捕获之后,我仍然可以连接到工作人员打开的套接字。

1 个答案:

答案 0 :(得分:4)

关闭ServerSocket。这将解除带有异常的accept()。

如果你想要一个更干净的解决方案,设置一个布尔值,将一个Socket连接到监听端口,并让你的accept()循环在每次接受连接时检查布尔值。

或者,设置一个accept()超时,设置一个布尔值,并让accept()循环在每次超时时检查布尔值。