Eclipse 3.6を使用するEclipse RCPスタンドアロンアプリケーションがあります。コマンドを使用して新しいFormPageをFormEditorに追加して表示する
私はFormEditorとその(複数の)FormEditorのFormPageを実装しました。最初のFormPageには、いくつかのデータを計算するコマンドを持つButtonがあり、結果を含む2番目のFormPageを開く必要があります。
結果が計算され、2番目のFormPageが結果を表示し、FormEditorに正しく追加されています。
私の問題は、FormEditorに新しいタブしか表示されないということです。 2番目のFormPageがすぐに表示されるようにします。代わりに、2番目のページを表示するには、タブをクリックする必要があります。
次は、FormPageをエディタに追加するハンドラのコードです。
これは問題なく動作しますが、ResultPageをフォアグラウンドにする必要があります。
public void setFocus(){
this.getPartControl().setFocus();
}
しかしときがnullpointer Exeptionが発生します。このようなResultPageの方法)
IFormPage resultPage = editor.findPage("my.project.ResultPage");
resultPage.setFocus();
とのSetFocus(overrittenている:だから私はResultPageのは、setFocus()メソッドを呼び出そうとしましたメソッドsetFocusはPartControlを取得しようとします。 ResultPageはその時点でロードされていないようです。
は、だから私はこのようasyncExec経由では、setFocus()メソッドを呼び出そうとしました:
Display.getDefault().asyncExec(new Runnable() {
public void run() {
//...call the setFocus() Method ....
}
}
をしかし、それは同じNullPointerExceptionが発生します。また、Runnableに待機を追加することにより、IllegalMonitorState Exceptionが発生します。
私はいくつかの方法を試して、解決策をインターネットで検索しましたが、見つけられませんでした。だから私はあなたが私を助けてくれることを願っています。
特定のFormPageを前面に持ってきれいな方法がありますか? setFocus()メソッドを間違って呼び出すのですか? toForeground()のようなものでしょうか? FormEditor/FormPage UI要素でこれが可能ではないのですか?
よろしく
マティアス
Thaksで試してみてください。これは少し動作します。 ResultPageはボタンをクリックしてフォアグラウンドになります。しかし残念ながら、このページは空白です。エディタでsetSelection(2)を呼び出すときにResultPageのcreateFormContentが呼び出されませんでした。だから私はResultPageがaferwardsで作成されているので、refresh()メソッドを呼び出すことさえできません。 – Matthias2206
選択を設定する前に#pageChanged(int)を呼び出すと機能しますか? –
はい、動作しています!大変ありがとう、あなたは英雄です! – Matthias2206