当处置显示时,线程池线程总是在swt syncExec调用中挂起。如何避免这种情况并干净地关闭线程?在shell disposeListener中调用shutdownNow不起作用。
以下示例显示了线程池线程执行的runnable。您可以在此处找到完整的代码:http://www.java-forum.org/awt-swing-javafx-and-swt/164617-threadpool-sicher-beenden-verwendung-swt-widgets-display-syncexec.html
private class DoSomething implements Runnable {
public void run() {
try { Thread.sleep( 500 ); } catch( InterruptedException e ) {e.printStackTrace();}
if( !shell.isDisposed() ) {
display.syncExec( new Runnable() {
public void run() {
drawshit( display );
}
});
}
}
}
}
答案 0 :(得分:0)
syncExec()
中的DoSomething
次呼叫导致死锁。如果用syncExec()
替换asyncExec()
,则线程池关闭就好了。是否有使用syncExec()
的具体原因?
或者,您应该能够从单独的线程运行关闭代码以避免此问题。