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),并使用myPropertychangeListener
侦听属性更改。当它被触发时,我检查DONE
状态,然后在尝试调用mySwingworker.get()时检查CancellationException
奇怪的是,即使捕获到取消异常
,我仍然可以连接到工作人员打开的套接字 关闭服务器套接字。这将使用异常解除对accept()的阻止
如果想要更简洁的解决方案,请设置一个布尔值,将套接字连接到侦听端口,并让accept()循环在每次接受连接时检查布尔值
或者,设置一个accept()超时,设置一个布尔值,让accept()循环在每次超时时检查布尔值。关闭ServerSocket。这将使用异常解除对accept()的阻止
如果想要更简洁的解决方案,请设置一个布尔值,将套接字连接到侦听端口,并让accept()循环在每次接受连接时检查布尔值
或者,设置一个accept()超时,设置一个布尔值,并让accept()循环在每次超时时检查布尔值。超时方法非常适合我的需要,谢谢!超时方法非常适合我的需要,谢谢!