Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在取消Socket.Accept()阻止的SwingWorker?_Java_Multithreading_Sockets_Swingworker - Fatal编程技术网

Java 正在取消Socket.Accept()阻止的SwingWorker?

Java 正在取消Socket.Accept()阻止的SwingWorker?,java,multithreading,sockets,swingworker,Java,Multithreading,Sockets,Swingworker,我有一个SwingWorker,它打开一个ServerSocket,然后在服务器套接字上调用.accept()。大多数时候,线程在调用accept()时阻塞。在某个时刻,我想取消线程。问题是工作线程被其对accept()的调用阻塞。是否有一种机制可以“取消阻止”此调用并调用一些关闭代码 当前我正在调用MyWingWorker.cancel(true),并使用myPropertychangeListener侦听属性更改。当它被触发时,我检查DONE状态,然后在尝试调用mySwingworker.g

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

当前我正在调用MyWingWorker.cancel(true),并使用my
PropertychangeListener
侦听属性更改。当它被触发时,我检查
DONE
状态,然后在尝试调用
mySwingworker.get()时检查
CancellationException


奇怪的是,即使捕获到
取消异常
,我仍然可以连接到工作人员打开的套接字

关闭服务器套接字。这将使用异常解除对accept()的阻止

如果想要更简洁的解决方案,请设置一个布尔值,将套接字连接到侦听端口,并让accept()循环在每次接受连接时检查布尔值


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

关闭ServerSocket。这将使用异常解除对accept()的阻止

如果想要更简洁的解决方案,请设置一个布尔值,将套接字连接到侦听端口,并让accept()循环在每次接受连接时检查布尔值


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

超时方法非常适合我的需要,谢谢!超时方法非常适合我的需要,谢谢!