2016-04-15 11 views
0

init()メソッドがメインGUIを作成している間、単純なプリローダを使用するプログラムがあります。すべて正常に動作しますが、init()メソッドが完了してプリローダーが消えた後、メインステージが表示されるまでにはかなりの遅延があります。私はそれがユーザーが混乱するのに十分な7秒ほどであることができるので、目立つと言います。プリローダとステージの間の遅延が表示されます

私はstart()方法でできるだけ入れてみました:

public void start(Stage stage) { 
    /*Scene*/ 
    scene = new Scene(root, 1200, 700); 
    stage.setScene(scene); 
    scene.setFill(null); 

    /*Stage*/ 
    stage.initStyle(StageStyle.TRANSPARENT); 
    stage.centerOnScreen(); 
    stage.show(); 

} 

は排除/この遅延を低減する方法はありますか?プリローダーを完全に廃止して、メインプログラムの段階として実装する方が良いでしょうか?前もって感謝します。

EDIT:

私はMaverick283のアドバイスを取り、プリローダーのフェードアウトを実装しました。私は最後の通知(メインプログラムからプリローダーに)を送った。がメインステージを示した後、それは完全に機能した!

public void start(Stage stage) { 
    /*Scene*/ 
    scene = new Scene(root, 1200, 700); 
    stage.setScene(scene); 
    scene.setFill(null); 

    /*Stage*/ 
    stage.initStyle(StageStyle.TRANSPARENT); 
    stage.centerOnScreen(); 
    stage.show(); 
    notifyPreloader(new Preloader.ProgressNotification(0.99)); 
} 

答えて

1

Oracleから:

アプリケーションが起動する前にプリローダーによって受信された最後の状態変化通知がStateChangeNotification.Type.BEFORE_STARTです。処理後、アプリケーションのstart()メソッドが呼び出されます。ただし、start()メソッドが呼び出された後でアプリケーションがそのステージを表示する準備が整うまでには時間がかかることがあります。プリローダーステージが既に隠れている場合は、アプリケーションが画面上に何も表示しない期間があります。

このように、彼らはそれを修正する方法をサンプルコードを提供します。

@Override 
public void handleStateChangeNotification(StateChangeNotification evt) { 
    if (evt.getType() == StateChangeNotification.Type.BEFORE_START) { 
     if (isEmbedded && stage.isShowing()) { 
      //fade out, hide stage at the end of animation 
      FadeTransition ft = new FadeTransition(
       Duration.millis(1000), stage.getScene().getRoot()); 
       ft.setFromValue(1.0); 
       ft.setToValue(0.0); 
       final Stage s = stage; 
       EventHandler<ActionEvent> eh = new EventHandler<ActionEvent>() { 
        public void handle(ActionEvent t) { 
         s.hide(); 
        } 
       }; 
       ft.setOnFinished(eh); 
       ft.play(); 
     } else { 
      stage.hide(); 
     } 
    } 
} 

あなたが読み続けた場合は2つの段階(プリローダーとメインアプリケーションの段階)を共有する方法もあります...

関連する問題