【发布时间】:2017-04-07 23:46:44
【问题描述】:
我正在尝试制作一个具有 2 个屏幕的简单应用程序,一个用于加载应用程序,一个仅使用 Java 和 CSS(无 FXML)计算输入项目的价格,但我卡在启动画面上。我知道这个
primaryStage.initStyle(StageStyle.UNDECORATED);
从这篇文章中去掉窗口顶部的按钮。
How to remove JavaFX stage buttons (minimize, maximize, close)
一旦启动画面关闭(我将其设置为在 5 秒内关闭),我希望这 3 个按钮对用户可见。所以显而易见的事情就是这样。
PauseTransition delay = new PauseTransition(Duration.seconds(5));
delay.setOnFinished(e -> {
primaryStage.setScene(mainScene);
primaryStage.initStyle(StageStyle.DECORATED);
});
delay.play();
primaryStage.show();
但我得到了这个堆栈跟踪:
Exception in thread "JavaFX Application Thread" java.lang.IllegalStateException: Cannot set style once stage has been set visible
at javafx.stage.Stage.initStyle(Stage.java:493)
at splash.SplashScreen.lambda$0(SplashScreen.java:42)
at javafx.animation.Animation.impl_finished(Animation.java:1132)
at javafx.animation.AnimationAccessorImpl.finished(AnimationAccessorImpl.java:49)
at com.sun.scenario.animation.shared.SingleLoopClipEnvelope.timePulse(SingleLoopClipEnvelope.java:103)
at javafx.animation.Animation.impl_timePulse(Animation.java:1102)
at javafx.animation.Animation$1.lambda$timePulse$25(Animation.java:186)
at java.security.AccessController.doPrivileged(Native Method)
at javafx.animation.Animation$1.timePulse(Animation.java:185)
at com.sun.scenario.animation.AbstractMasterTimer.timePulseImpl(AbstractMasterTimer.java:344)
at com.sun.scenario.animation.AbstractMasterTimer$MainLoop.run(AbstractMasterTimer.java:267)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:506)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:490)
at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$404(QuantumToolkit.java:319)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
我知道启动画面不应该只是等待 n 秒然后打开应用程序,但这不是重点。
最让我印象深刻的是堆栈跟踪的第一行:“一旦舞台设置为可见,就无法设置样式”。为什么我不能改变风格?是什么阻止了 JavaFX 添加一个栏和 3 个按钮??
我什至尝试过这样做:
PauseTransition delay = new PauseTransition(Duration.seconds(5));
delay.setOnFinished(e -> {
primaryStage.hide();
primaryStage.setScene(mainScene);
primaryStage.initStyle(StageStyle.DECORATED);
primaryStage.show();
});
delay.play();
primaryStage.show();
为了隐藏窗口,更改 initStyle,然后显示它,但我再次遇到同样的错误。
那么,我的问题是,为什么我不能改变风格?是什么阻止了 JavaFX 添加一个栏和 3 个按钮??
感谢您的帮助。
【问题讨论】: