java - 组织.eclipse.swt.SWTException : "Widget is disposed" from table refresh

标签 java swt eclipse-rcp jface

该应用程序是一个基于 Eclipse 3.6 的 RCP(因此 jface 版本 3.5.2)在 Windows 7 上运行。

我有一个包含 TableViewer 并对其调用 refresh() 的自定义 View 类。有时,但不是经常,它会导致下面的堆栈跟踪。它是从 UI 线程中调用的。我怀疑问题出在将支持列表更改为表的其他代码,但执行此操作的任何代码也在 syncExec 或 asyncExec 方法中运行,所以我不明白它如何成为更改之间的同步问题表格项目和查看器的刷新。

有什么想法可以防止这种情况发生吗?

!ENTRY org.eclipse.jface 4 2 2010-10-20 09:22:06.140 !MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.jface". !STACK 0 org.eclipse.swt.SWTException: Widget is disposed 
at org.eclipse.swt.SWT.error(SWT.java:3884) at org.eclipse.swt.SWT.error(SWT.java:3799) 
at org.eclipse.swt.SWT.error(SWT.java:3770) at org.eclipse.swt.widgets.Widget.error(Widget.java:463) 
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:336) 
at org.eclipse.swt.widgets.Widget.getData(Widget.java:521) 
at org.eclipse.jface.viewers.AbstractTableViewer.setSelectionToWidget(AbstractTableViewer.java:921) 
at org.eclipse.jface.viewers.StructuredViewer.setSelectionToWidget(StructuredViewer.java:1711) 
at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1399) 
at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1353) 
at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1455) 
at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:537) 
at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1414)
... 
at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:179)

最佳答案

似乎在处理查看器(关闭?)后调用了 refresh() 方法。您可以通过检查来避免此异常:

public void refresh() {
   if (viewer != null && !viewer.getControl().isDisposed()) {
      // Actual refresh code
   }
}

关于java - 组织.eclipse.swt.SWTException : "Widget is disposed" from table refresh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5144590/

相关文章:

java - 如何使用GC重绘SWT表项而不重绘其他表项?

java - JFace TableViewer - 根据其他单元格设置单元格格式

java - 如何在java中检测windows字体大小(100%、125%、150%)

swt - 使用 JFace 数据绑定(bind)绑定(bind)单选按钮组的正确方法

java - 如何使用命令访问 Eclipse RCP 中的右键单击文件?

java - SimpleDateFormat 在 Android 中的行为很奇怪

java - 坐标之间的距离 - 角度 > 180(处理/Java)

eclipse-rcp - Eclipse Kepler RCP 主工具栏操作

java - Queue 接口(interface)中的 peek() 方法

java - 异步功能 - 错误状态 0