我的应用程序大约需要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文档
答案 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中,您需要做两件事:
- 采取行动
- 加载应用程序的屏幕
因此您需要像这样在控制器内部创建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主题的精彩视频