java - org.eclipse.swt.SWTException : Widget is disposed when removing multiple rows from table - SWT

标签 java swt

我有 Table ,它具有 SWT.CHECK 样式,因此我可以删除选中的项目。我添加按钮和 SelectionAdapter 来完成这项工作:

    Button btnRemove = new Button(this, SWT.PUSH);
    btnRemove.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            TableItem[] items = table.getItems(); /* get all items */
            int i;

            for (i = 0;i < items.length;i++)
                if (items[i].getChecked()) /* look if it is selected */
                    table.remove(i);
        }
    });

当我删除单个项目时,它工作正常,但是当我检查多个项目然后点击删除时,我收到 SWTException: Widget is Dispose。这是完整的堆栈跟踪:

org.eclipse.swt.SWTException: Widget is disposed
    at org.eclipse.swt.SWT.error(SWT.java:4282)
    at org.eclipse.swt.SWT.error(SWT.java:4197)
    at org.eclipse.swt.SWT.error(SWT.java:4168)
    at org.eclipse.swt.widgets.Widget.error(Widget.java:468)
    at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:340)
    at org.eclipse.swt.widgets.TableItem.getChecked(TableItem.java:423)
    at org.majid.swt.Main$1.widgetSelected(Main.java:132)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:240)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4165)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754)
    at org.majid.swt.Main.main(Main.java:24)
  1. 有人可以帮忙解决这个问题吗?
  2. 是否有像 TableItems[] getCheckedItems() 这样的方法来仅检索检查项目而不是检查整个项目?

最佳答案

一旦调用table.remove(i);,表中的项目将与数组中的项目不同(少一个),并且在下一次迭代中,表中的第 i 个项目是不是你所期望的。

关于java - org.eclipse.swt.SWTException : Widget is disposed when removing multiple rows from table - SWT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8443610/

相关文章:

java - 为什么 JOptionPane 的确认对话框在单击是/否按钮时没有采取行动?

java - 桌面应用程序中的 JPA 实体管理,其中对象用于保持修改状态

java - 如何在 Jface tableviewer 列复选框图像中对齐中心?

java - 运行一分钟循环 - Android

Java DB 检查日期/时间字段(事件处理)?

java - Eclipse RCP CommonNavigator 工具提示?

java - 是否有用于 SWT 的预制放大镜光标?

java - 防止在文本字段上滚动? Java SWT

java - 在 Eclipse RCP 中实现属性表编辑器的最简单方法是什么?

java - 单击前一帧中的按钮后,如何在新帧中打开 JProgress 栏?