私のアプリケーションは、OOTBアプリケーション内で実行するように作成されています。ユーザーはOOTBアプリケーションからデータを選択し、それを私のアプリケーションのWritableListに保存できます。次に、ユーザーはOOTBツールバーのボタンをクリックして、アプリケーションの基本ダイアログを開くことができます。このダイアログには、ユーザーがすでに選択したデータのテーブルが表示されます。基本ダイアログから、テーブル内のデータに対してさまざまなタスクを実行できます。これには、データの削除と、OOTBアプリケーションからの追加データの選択が含まれます。私のアプリケーションは、ユーザーがOOTBアプリケーションを閉じるまでデータを保存します。ただし、ダイアログをビューから削除するには、ベースダイアログのボタンをユーザーに提供する必要があります。したがって、OOTBアプリケーションを使用しているときは、ダイアログが邪魔になりません。私の基本ダイアログはTitleAreaDialogから構築されています。
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();
}
});
}
しかし、close(); すべてのSWTウィジェットを破棄し、ランタイムエラーを引き起こしていました。ダイアログのバックアップを開こうとしたときに、SWT_Widgetはすでに破棄されています。それで、いくつかのアドバイスで、私はシェルを隠すことを取り入れようとしました。そこで、close()を削除して、getShell()に配置しました。
protected void createButtonsForButtonBar(Composite parent) {
Button okButton = createButton(parent, OK, "Close", true);
okButton.setEnabled(true);
okButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
viewer = null;
getShell().setVisible(false);
}
});
}
今、私は次の行で実行時のNull Pointer Exceptionを取得しています:getShell()。setVisible(false);
「OK」を削除してSWT_PUSHに置き換えた場合。エラーなしで動作するようです。
protected void createButtonsForButtonBar(Composite parent) {
Button okButton = createButton(parent, SWT.PUSH, "Close Aplot", true);
okButton.setEnabled(true);
okButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
viewer = null;
getShell().setVisible(false);
}
});
}
前の質問で、これは良い習慣ではないことに気づきました。
では、ダイログを閉じずに非表示にするにはどうすればよいですか?メソッドcreateButtonsForButtonBarを保持する必要があると想定しています。では、シェルハイドを適切に処理するために必要なものをどのように変更できますか?
ありがとう
編集
これは正しいように見えますか?
@Override
protected void createButtonsForButtonBar(final Composite parent) {
createButton(parent, IDialogConstants.OK_ID, "Close Aplot",
true);
}
@Override
protected void okPressed() {
viewer = null;
getShell().setVisible(false);
}