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

Image as splashscreen for JavaFX application not hiding automatically

我有一个简单的 .png 图像文件,我希望在加载 JavaFX 应用程序时显示它。

我正在使用 NetBeans 作为我的 IDE 我知道可以像这样添加启动画面: 项目属性 -> 运行 -> VM 选项:-splash:path-to-image

现在启动画面正常启动,但在我的应用程序启动后它不会关闭。只是坐在屏幕上,直到我完全关闭我的应用程序。 正如文档所说 (http://docs.oracle.com/javase/7/docs/api/java/awt/SplashScreen.html) "The splash screen window is closed automatically as soon as the first window is displayed by Swing/AWT"。 JavaFX 不是 Swing 也不是 AWT 应用程序。那么如何关闭呢?

感谢任何帮助!

好的,回答我自己的问题。

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

希望这对其他人也有所帮助! ;)

虽然接受的答案是正确的,但仍有改进的余地。您不应使用 final 关键字,因为这会使初始图像挂起。此外,您可以使用内置的 isVisible() 方法检查 splash 是否可见,而不是使用 null

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

在 AdoptOpenJDK 14 上,调用 SplashScreen.getSplashScreen() 会抛出 HeadlessException

为了解决这个问题,我做了:

    System.setProperty("java.awt.headless", "false");
    Optional.ofNullable(SplashScreen.getSplashScreen()).ifPresent(SplashScreen::close);
    System.setProperty("java.awt.headless", "true");