2011-07-16 4 views
2

ファイルのリストを含むJFaceアプリケーションがあります。ユーザーがリスト内のファイルをクリックすると、子ウィンドウが開きます。子ウィンドウは自動的にファイルコンテンツをテキストウィジェットに読み込みます。初期化時にJFaceウィンドウを閉じる

ファイルの内容の読み込みに失敗することがあります。私はそのような状況を検出することができ、子ウィンドウがスクリーンに表示される前に閉じることができます。

子ウィンドウのオーバーライドprotected Control createContents(Composite parent)メソッドの最後にclose()を呼び出しようとしました。しかし、私は、JFaceのライブラリ内のどこかにはnull例外が発生しました:

Exception occurred java.lang.NullPointerException 
at org.eclipse.jface.window.Window.initializeBounds(Window.java:758) 
at org.eclipse.jface.window.Window.create(Window.java:435) 
at org.eclipse.jface.window.Window.open(Window.java:790) 

どこ初期値を持つウィンドウのウィジェットを初期化するための正しい場所はありますか?理想的には、それは条件を満たす必要があると感じます:

  • ウィジェットは、フレームワークによって既に作成されている必要があります。
  • ウィンドウはまだ表示されないはずです。
  • close()は、必要に応じて正しくウィンドウを閉じる必要があります。

答えて

0

Windowオブジェクトにまだウィンドウシェルがない場合、open()メソッドは新しいオブジェクトを作成して開きます。 createContents(Composite parent)が呼び出されたときには、その一部の視覚的詳細を設定する他の方法とともに、create()メソッドにあります。それは既に存在するシェルに依存するinitializeBounds()メソッドです。あなたがそれを閉じれば、そこに行く、例外がある。

たぶん、あなたはopen()方法自体を上書きしたい:

public int open() { 
    if (!condition) 
     return super.open(); // as usual 
    else 
     return CANCEL; 
} 
+0

は、アイデアをいただき、ありがとうございます。私は今それをチェックすることはできません。しかし、私は 'if'の前に初期化コードを置かなければならないようです。したがって、ウィジェットは 'super.open()'実行時に作成されるため、初期化コードはウィジェットにアクセスできません。私は、初期化コードを2つの部分に分けなければなりません:1)ウィジェットに依存せず、失敗するかもしれません。 2)ウィジェットの扶養家族は、決して失敗してはならない。 – borisstr

関連する問題