Preloader和Stage之间的延迟显示

问题描述:

我有一个程序使用简单的预加载程序,而init()方法创建主要的gui。一切正常,但在init()方法完成并且预加载器消失之后,在主要阶段出现之前会有明显的延迟。我说很明显,因为它可能高达7秒,足以让用户感到困惑。Preloader和Stage之间的延迟显示

我试图尽可能少的投入尽可能在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(); 

} 

是否有降低/消除这种延迟的方法吗?将预加载器完全取消并将其作为主程序中的一个阶段实施会更好吗?提前致谢。

编辑:

我把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)); 
} 

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(); 
     } 
    } 
} 

如果你继续阅读,甚至有共享的两个阶段(预加载和主要应用阶段)的方式...