我有一个简单的.png图像文件,我希望在JavaFX应用程序加载时显示。
我使用NetBeans作为我的IDE,我知道可以像这样添加splashscreen: 项目属性 - >运行 - > VM选项:-splash:path-to-image
现在启动画面开始很好,但在我的应用程序启动后它不会关闭。只是坐在屏幕上,直到我完全关闭我的应用程序。 正如文档所说(http://docs.oracle.com/javase/7/docs/api/java/awt/SplashScreen.html)"一旦Swing / AWT"显示第一个窗口,启动屏幕窗口就会自动关闭。 JavaFX不是Swing也不是AWT应用程序。那我该如何关闭呢?
感谢任何帮助!
答案 0 :(得分:5)
好的,回答我自己的问题。
在VM选项中设置启动时:-splash:path-to-image。 在JavaFX我能够这样关闭它:
//Get the splashscreen
final SplashScreen splash = SplashScreen.getSplashScreen();
//Close splashscreen
if (splash != null) {
System.out.println("Closing splashscreen...");
splash.close();
}
希望这对其他人也有所帮助! ;)
答案 1 :(得分:0)
在AdoptOpenJDK 14上,调用SplashScreen.getSplashScreen()
会引发HeadlessException
。
要解决此问题,我做到了:
System.setProperty("java.awt.headless", "false");
Optional.ofNullable(SplashScreen.getSplashScreen()).ifPresent(SplashScreen::close);
System.setProperty("java.awt.headless", "true");
答案 2 :(得分:-1)
虽然接受的答案是正确的,但仍有改进的余地。您不应该使用final
关键字,因为这会使启动图像挂起。此外,您可以使用内置的null
方法检查splash
是否可见,而不是使用isVisible()
。
import java.awt.*;
public class MainApp extends Application {
@Override
public void start(Stage stage) throws Exception {
SplashScreen splash = SplashScreen.getSplashScreen();
if (splash.isVisible()) {
System.out.println("Is visible");
splash.close();
}
}
}