2016-06-12 9 views
-1

"start"メソッドの外部から2番目のJavaFXウィンドウ(ステージ)を開くにはどうすればよいですか?例えば、外部から2番目のJavaFXウィンドウを開く

public class GUI_Test extends Application { 
static Stage secondStage; 

public static void main(String[] args) { 
    launch(args); 
    showSecondWin(); 
} 

@Override 
public void start(Stage primaryStage) throws Exception { 
    primaryStage.setScene(new Scene(
      new VBox(
        new Label("window 1")))); 
    primaryStage.show(); 

    secondStage = new Stage(); 
} 

public static void showSecondWin() { 
    secondStage.setScene(new Scene(
      new VBox(
        new Label("window 2")))); 
    secondStage.show(); 
} 
} 

上記のコードは、最初のウィンドウ(「primaryStage」)を示しており、私はそれを閉じて(のみ)場合java.lang.reflect.InvocationTargetExceptionエラーメッセージが表示されます。

James_Dには、最初から外から2番目のウィンドウを開く方法があると言いました。これはどのように達成できますか?

+0

私はsillyflyへの私のコメントで説明したように、ボタンやその他のstart()メソッドから2番目のウィンドウを開きたくないので、これは他の質問とは異なります。 –

+1

JavaFXアプリケーションの 'start()'メソッドは、 "従来の"(つまりJavaFXではなく)アプリケーションの 'main()'メソッドの代わりに考えるべきです。 (JavaFXでは、 'main()'メソッドは必要ありません!) 'start()'はアプリケーションのエントリーポイントです。すべてがそのポイントから開始されます。最終的に 'start()'メソッドによってトリガされないものを行うように依頼するのは、実際には意味がありません。おそらく[この質問](http://stackoverflow.com/questions/37579645)が役立ちます。 –

+0

@James_D私は、アプリケーションクラス内のメソッド(開始ではない)から2番目のウィンドウを作成したいと思います。 SecondWinメソッドは別のクラスによって呼び出されます。 –

答えて

3

Applicationのドキュメントから:アプリケーションはPlatform.exitへの呼び出しを介して、またはアプリケーションウィンドウのすべてのいずれかがクローズされた、終了したまでは打ち上げ方法が戻らない

これはのみのJavaFXスレッドが終了した後に呼び出されますので、あなたは、任意の複数の段階を作成することはできませんあなたのmain方法の2行目を意味します。

startメソッドの中に2番目のステージを作成して表示することができます。それが有効なオプションでない場合は、達成しようとしていることを説明してください。

+0

startメソッドの外側からトリガされたダイアログウィンドウを開きたいとします。たぶん、私はstage.hide()メソッドで何かできますか?私はそれを少し試してみましたが、うまくいきませんでした... –

+0

他のステージを開くトリガーは何ですか?なぜアプリケーションが終了するまで表現できないのですか? – Itai

+0

アプリケーションクラス内で、メソッド(開始ではない)から2番目のウィンドウを作成したいとします。 SecondWinメソッドは別のクラスによって呼び出されます。 –

関連する問題