Java如何防止widget出错?

时间:2013-02-03 11:27:31

标签: java multithreading widget swt dispose

当我关闭主窗口时,我收到错误,因为它被丢弃了。我试图“过滤掉”(使用条件),但我无法让它起作用。

if(!Display.getDefault().isDisposed()){
   Display.getDefault().syncExec(new Runnable() {

      @Override
      public void run() {
         View.tableViewer.refresh();
         setViewInfo();
      }
    });
}

错误:

  

线程“Thread-3”中的异常org.eclipse.swt.SWTException:失败   execute runnable(org.eclipse.swt.SWTException:Widget被释放)     在org.eclipse.swt.SWT.error(SWT.java:4361)at   org.eclipse.swt.SWT.error(SWT.java:4276)at   org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:196)     在   org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:150)     在org.eclipse.swt.widgets.Display.syncExec(Display.java:4687)at   com.chriss.udp.Message.WRITE(Message.java:166)at   com.chriss.udp.threads.ThreadConnect.run(ThreadConnect.java:55)at at   java.lang.Thread.run(未知来源)引起:   org.eclipse.swt.SWTException:小部件被处理

1 个答案:

答案 0 :(得分:2)

您可以询问是否处置Widget

boolean isDisposed() 
  

如果窗口小部件已被释放,则返回true,否则返回false。

您不必检查显示,因为只要应用程序正在运行,它就不会被丢弃。 你必须检查runnable中的表或this.isDisposed()。

请发布完整的堆栈跟踪。我把问题解决了在runnable中。