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

3
我有一个简单的.png图像文件,希望在JavaFX应用程序加载时显示。
我使用NetBeans作为我的IDE,我知道可以像这样添加启动画面: 项目属性->运行->VM选项:-splash:path-to-image 现在启动画面很好地开始了,但是它在我的应用程序启动后不会关闭。只是坐在屏幕上,直到我完全关闭我的应用程序。 正如文档所说(http://docs.oracle.com/javase/7/docs/api/java/awt/SplashScreen.html)“一旦Swing / AWT显示第一个窗口,启动画面窗口就会自动关闭”。 JavaFX不是Swing或AWT应用程序。 那么我该如何关闭它?
任何帮助都将不胜感激!
3个回答

6

好的,我来回答这个问题。

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

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

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");

-1

虽然接受的答案是正确的,但还有一些改进的空间。你不应该使用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();
        }
    }
}

你对final关键字的评论完全错误。 - loonytune
因为在变量上使用它没有任何区别。当方法返回时,对象无论如何都会被取消引用。变量上的final关键字只是源代码级的特性,在生成的字节码上没有任何影响。 - loonytune
我明白你的意思,但对我的情况没有产生影响。在我的情况下使用final关键字并没有起作用。 - Md Mazedul Islam Khan
我在几个月前因为与Java的一些问题而离开了那个项目,但我可以确认我当时使用的是最新的Java版本。 - Md Mazedul Islam Khan
我认为如果你不检查splash不是null并且它是null,那么使用'splash.isVisible()'将会引发异常。 - Nate Lockwood
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接