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

シェルを閉じた後は、情報を読み取ろうとしていないことを確認してください。例:

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

shlUploadを閉じると、これは機能しなくなり、オブジェクト「combo」は表示されなくなります。オースティン

于 2013-06-13T14:13:55.510 に答える