0

クラスAのメソッドA(非GUI)

public void add() {
   if(etc...) {
      add data to a arraylist ..... 
   }
   Class B.updateTable();
 }

上記のメソッドは、基本的にデータをarraylistに追加してから、クラスbのtableViewerを更新します。

クラスB-GUIダイアログ

クラスB.updateTable()を呼び出す前に、クラスBのGUIが開いていて、破棄されていないことを確認したいと思います。

ユーザーは、クラスB GUIを開かなくてもクラスA(非GUI)を使用できます。クラスAはユーザーが選択したArrayListを作成し、クラスBはそれを表示するためです。そのため、データを表示しようとせずにデータを追加できます。

現在B.updateTable()を実行していて、クラスBが開いていない場合、ウィジェットの破棄エラーが発生します。

テーブルを更新する前に、チェックを追加してウィジェットが破棄されていないことを確認できれば。

クラスAの値を確認できますか、それともshell.isDisposedのようなものを返すクラスBの静的ブールメソッドを作成する必要がありますか?

次に、クラスAメソッドで、チェックを追加するだけで済みます。

  public void add() {
     if(etc...) {
        add data to a arraylist ..... 
     }
     if(!Class B.isShellDisposed()) {       
        Class B.updateTable();
     }
  }

これは可能ですか、それともエラーを処理する正しい方法ですか?

4

1 に答える 1

0

私が抱えていた問題は、GUIを閉じている間にテーブルビューアを更新することでした。ユーザーがGUIを閉じて、メインアプリケーションを介してアレイリストにデータを追加する場合。GUIのテーブルビューアを更新するためのコードがaddメソッドにありました。主な問題は、GUIが閉じていても、テーブルビューアがnullではなかったことです。そのため、私のコードは、すでに破棄されているものを更新しようとしていました。GUIを閉じたときにテーブルビューアを更新する必要がないことを知っています。閉じるボタンのコードでテーブルビューアをnullに設定しました。次に、updateメソッドでビューアのnullを確認しました。

static public void updateTableViewer() {

  if(getViewer() != null) {
     viewer.refresh();
  }
}

したがって、GUIを閉じると、テーブルビューアはヌルになり、GUIを開くと、テーブルビューアはヌルになりません。これは私にとってはうまくいくようです。

于 2012-10-29T20:38:16.067 に答える