如何在不抛出NullPointerException的情况下使用SplashScreen?

无论我尝试什么, SplashScreen.getSplashScreen() 始终为 null

从在线搜索我发现这是一个常见问题,并且它与不给SplashScreen使用图像有关…因此,在导航方法中,我认为应该使用setImageURL(URL) 。 这仍然无效。

在SO上也存在类似的问题,这些问题没有帮助,似乎建议使用无数的插件或从Frame开始创建这样的类。 即使是Oracle教程也很神秘,并没有概述正确使用SplashScreen每个逻辑步骤……

如果使用SplashScreen是不可能或不必要的,那么有没有替代方法呢? 或者有没有人破解出这个问题的简单方法?


这是我的尝试:

 import java.awt.Color; import java.awt.Graphics2D; import java.awt.SplashScreen; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.net.URL; /** */ public final class MainGUI implements ActionListener { /** * @throws IOException * @throws IllegalStateException * @throws NullPointerException */ private final static void showSplashScreen() throws NullPointerException, IllegalStateException, IOException { final SplashScreen splash = SplashScreen.getSplashScreen(); Graphics2D graphics = splash.createGraphics(); // adding image here: URL imageSource = new URL("http://sofzh.miximages.com/java/Space_Shuttle_Atlantis_approaching_the_Kennedy_Space_Center_to_land_following_STS-122.jpg/800px-Space_Shuttle_Atlantis_approaching_the_Kennedy_Space_Center_to_land_following_STS-122.jpg"); splash.setImageURL(imageSource); // coordinates and dimensions: int x = 100, y = x; int width = 500, height = width; // (x, y), width, height: graphics.create(x, y, width, height); graphics.setBackground(Color.BLUE); // adding and centering the text: graphics.drawString("centered text", (x + width)/2, (y + height)/2); } @Override public void actionPerformed(ActionEvent e) { } /** * @param args */ public static void main(String[] args) { try { showSplashScreen(); } catch (NullPointerException | IllegalStateException | IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } // end of MainGUI 

看看如何创建启动画面

您需要通过命令行或Jar清单提供图像

更新一些基础知识

您必须为启动画面提供图像。 如果不这样做,它将始终为null。

有两种方法可以做到这一点

1.从命令行

 java -splash:path/to/image.jpg {other command line options} 

映像必须位于应用程序的类加载器的上下文中(例如嵌入式资源)。

2.清单文件

这有点困难,但会导致更简单的执行(因为没有人需要记住添加命令行;))…

有关更多详细信息,请查看使用清单文件 。

如何创建它取决于您的环境。

例如,在Netbeans中,您可以在“ Application节点下的“项目属性”对话框中设置启动屏幕属性。