应用程序初始化时启动屏幕

时间:2018-10-22 06:14:48

标签: java javafx javafx-8

我的应用程序大约需要3-5秒才能启动。我想在等待时通过启动屏幕向用户提供反馈。在应用程序初始化时,有人可以指导我如何实现启动屏幕吗?

我的应用程序主要由一个tabPane和几个tabs组成。每个选项卡都有其自己的控制器和FXML。

我已经尝试过preloader,但是它不适用于我的情况,或者我不确定如何配置它才能使其正常工作。在线上的大多数消息来源都使用了“计时器”,但这样做没有任何意义。

加载FXML:

  

2018年10月22日1:54:56 PM javafx.fxml.FXMLLoader $ ValueElement processValue   警告:通过版本8.0.71的JavaFX运行时,使用版本8.0.171的JavaFX API加载FXML文档

     

2018年10月22日1:54:56 PM javafx.fxml.FXMLLoader $ ValueElement processValue   警告:通过版本8.0.71的JavaFX运行时,使用版本8.0.171的JavaFX API加载FXML文档

     

2018年10月22日1:54:56 PM javafx.fxml.FXMLLoader $ ValueElement processValue   警告:通过版本8.0.71的JavaFX运行时,使用版本8.0.171的JavaFX API加载FXML文档

     

2018年10月22日1:54:56 PM javafx.fxml.FXMLLoader $ ValueElement processValue   警告:通过版本8.0.71的JavaFX运行时,使用版本8.0.171的JavaFX API加载FXML文档

     

2018年10月22日1:54:56 PM javafx.fxml.FXMLLoader $ ValueElement processValue   警告:通过版本8.0.71的JavaFX运行时,使用版本8.0.171的JavaFX API加载FXML文档

1 个答案:

答案 0 :(得分:0)

1-创建您的fxml启动画面

2-在主要位置,将spashscreen链接如下:

@Override
public void start(Stage primaryStage) throws Exception{

    setPrimaryStage(primaryStage);
    prStage = primaryStage;
    Parent root = FXMLLoader.load(getClass().getResource("../gui/SplashScreen.fxml"));
    Scene scene = new Scene(root);
    prStage.setScene(scene);
    prStage.show();
}

3-在SplashScreenControler中,您需要做两件事:

  
      
  1. 采取行动
  2.   
  3. 加载应用程序的屏幕
  4.   

因此您需要像这样在控制器内部创建Task类:

public class splashscreenController implements Initializable {
    @FXML
    Pane panParent;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        new Thread(new SplashScreen()).start();
    }

    class SplashScreen extends Task {
        @Override
        public Object call() throws IOException, InterruptedException{
            //make something (here thrad.sleep)
            Thread.sleep(3000);
            Parent root = FXMLLoader.load(getClass().getResource("your/javafx/gui.fxml"));

            //need to be done after the initialized methode
            Platform.runLater(new Runnable() {
                @Override
                public void run()
                    Stage stage = new Stage();
                    assert root != null;
                    Scene scene = new Scene(root);
                    stage.setScene(scene);
                    //show your principal windows
                    stage.
                    MainJavaFx.setPrimaryStage(stage);

                    //close your splashScreen
                  ((Stage) panParent.getScene().getWindow()).close();
                }
            }
        });
        return null;
    }
}

如果您需要更多信息,可以观看有关here主题的精彩视频