【问题标题】:Image as splashscreen for JavaFX application not hiding automatically图像作为 JavaFX 应用程序的闪屏不会自动隐藏
【发布时间】:2015-04-04 21:29:09
【问题描述】:

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

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

现在启动画面可以很好地启动,但在我的应用程序启动后它不会关闭。只是坐在屏幕上,直到我完全关闭我的应用程序。 正如文档所说(http://docs.oracle.com/javase/7/docs/api/java/awt/SplashScreen.html)“Swing/AWT 显示第一个窗口后,启动屏幕窗口就会自动关闭”。 JavaFX 不是 Swing 也不是 AWT 应用程序。那么如何关闭呢?

感谢任何帮助!

【问题讨论】:

    标签: java javafx splash-screen


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      在 AdoptOpenJDK 14 上,调用 SplashScreen.getSplashScreen() 会引发 HeadlessException

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

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

      【讨论】:

        【解决方案3】:

        虽然公认的答案是正确的,但仍有改进的余地。您不应该使用 final 关键字,因为这会使启动图像挂起。另外,不用null,你可以使用内置的isVisible()方法检查splash是否可见。

        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 关键字的评论显然是错误的。
        • 您为什么认为我的评论中的final 关键字有误?你能详细说明一下吗?当我对此进行测试时,final 关键字对我不起作用,导致 Splash 卡住。
        • 因为在变量上使用它没有区别。当方法返回时,无论哪种方式都不会引用该对象。变量的 final 关键字只是一个源级特性,它对生成的字节码没有影响。
        • 我明白你在说什么,但这对我来说很重要。使用final 关键字,它对我不起作用。
        • 我不敢相信,这不是我的结局。我什至比较了字节码级别的代码,它完全一样。您是否使用了错误/非常旧的编译器?
        猜你喜欢
        • 2015-01-05
        • 1970-01-01
        • 2017-02-21
        • 2014-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-16
        相关资源
        最近更新 更多