1

我的用户从主应用程序工作区中选择数据。数据存储在可写列表中。然后用户继续打开对话框以在表格中显示所选数据。当我的用户第一次打开对话框时。一切都很好,一切都按计划进行。但是当他们关闭对话框然后重新打开它时。我收到以下错误。

在此处输入图像描述

他们可以关闭对话框并选择更多数据。然后再次打开对话框以查看旧数据和新数据。

代码使用到错误的步骤顺序。

  protected Control createDialogArea(Composite parent) {
    Composite composite = (Composite) super.createDialogArea(parent);  
    Label line = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
    line.setLayoutData(new GridData(SWT.FILL, SWT.END, true, true));
    final GridLayout gridLayout = new GridLayout();

    gridLayout.marginWidth = 15;
    gridLayout.marginHeight = 10;
    composite.setLayout(gridLayout);

    GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
    composite.setLayoutData(gridData);
    createTopButtons(composite);
    createTableViewer(composite);
    createRemoveButtons(composite);
    updateTableViewer();
    return composite;
 }

在错误中,我们可以看到它来自 updateTableViewer

public void updateTableViewer() {
  setRemoveButtonVisibility();
  setRemoveAllButtonVisibility();
  setPlotButtonVisibility();
  setPDFButtonVisibility();
}

在错误中,我们看到它来自 setRemoveButtonVisibility();

public void setRemoveButtonVisibility() {
  if (AplotDataModel.getInstance().getSize() > 0) {
     removeButton.setVisible(true);
  }
  else {
     removeButton.setVisible(false);
  }
}

这是它指向的行:

removeButton.setVisible(true);

if 条件是检查存储用户选择的数据的可写列表。如果列表为空,则不显示按钮,如果有数据,则显示按钮。

下面是关闭对话框按钮的代码:

protected void createButtonsForButtonBar(Composite parent) {
  Button okButton = createButton(parent, OK, "Close Aplot", true);
  okButton.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent e) {
        viewer = null;
        close();
     }
  });
}

有什么想法吗?

4

2 回答 2

5

不使用close(),而是使用getShell().setVisible(false)隐藏对话框。因为您正在重复使用同一个对话框,所以不应关闭它。如果您关闭对话框,而后者又将其关闭,您应该在每次需要打开它时创建一个新对话框。

于 2013-03-08T15:36:28.443 回答
0

确保您在关闭 shell 后没有尝试读取任何信息。例子:

System.out.println(combo.getText())
shlUpload.close();
ImportGroup window = new ImportGroup();
window.open(combo.getText());

一旦您关闭 shlUpload,这将不起作用,它不再看到对象“组合”。奥斯汀

于 2013-06-13T14:13:55.510 回答