2017-03-16 2 views
0

プロジェクトが終了したので、IntelliJでJARを作成しました。最初のステージ(javaFX)が表示されていますが、新しいステージを作成するためにボタンをクリックしても何も起こりません(期待していた古いステージが閉じてしまう)。ランタイムが新しいステージを作成しないのはなぜですか?新しいシーンを作成する前にJARが終了する

view.getStartButton().setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent event) { 
      view.getScene().getWindow().hide(); 
      GameView view = new GameView(); 
      TetrisSpelEigenschappen model = new TetrisSpelEigenschappen(); 
      TetrisSpel spel = new TetrisSpel(model); 
      TetrisBlokken blokmodel = new TetrisBlokken(spel,model); 
      GamePresenter gamePresenter = new GamePresenter(view, model, spel, blokmodel); 
      Stage gameStage = new Stage(); 
      Scene gameScene = new Scene(view); 
      gameStage.setScene(gameScene); 
      gameStage.setTitle("Game"); 
      gameStage.centerOnScreen(); 
      gamePresenter.addWindowEventHandlers(); 
      gameStage.showAndWait(); 
     } 
+0

コードによってチェックされていない例外がスローされているかどうかを確認するには、コマンドラインからjarファイルを実行してみてください( 'java -jar myJarFile.jar')。 –

答えて

1

デフォルトでは、最後のウィンドウが閉じられると、アプリケーションは終了します。あなたのコードでは、新しいウィンドウを開く前に既存のウィンドウを閉じるので、何が起こっているのかは、その間にプラットフォームが終了していることが疑わしいです。 (...この動作は少し壊れやすいことに注意してください)

は、あなたのApplicationクラスのinit()start(...)方法にライン

Platform.setImplicitExit(false); 

を追加します。

+0

何も変更されていないようです。ボタンを押した後も閉じます。私もgetWindow.hide()をコメントに入れてみました。 JARはもう終了しませんが、ボタンをクリックしても効果はありません。新しい段階はありません。 – m4t5k4

+0

@ m4t5k4したがって、 'hide()'の呼び出しと 'showAndWait()'の呼び出しの間に例外がスローされている可能性があります。それがjarファイルで起こっているが、ファイルシステムから実行したときではない場合、最も可能性の高い(しかし唯一の原因ではない)原因は、無効なリソース名のどこかにリソースをロードしていることです。コマンドラインからjarファイルを実行すると、未処理の例外がすべて表示されます。 –

+0

少し更新:JARファイルは絶対パスのためにリソースを見つけることができません。 – m4t5k4

関連する問題