图像作为不会自动隐藏的JavaFX应用程序的启动画面

时间:2015-04-04 21:29:10

标签: java javafx splash

我有一个简单的.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应用程序。那我该如何关闭呢?

感谢任何帮助!

3 个答案:

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