我有一个应用程序,当我不尝试将其用作网络启动应用程序时,它运行良好,但当我将其转换为Netbeans中的应用程序时时,它会崩溃。当试图获取位于依赖库中的资源时,控制台显示一个空指针异常。代码行本身获取该库文件中的.png文件,并将其用于窗口图标。杀死它的代码行是:
java.net.URL url = ClassLoader.getSystemResource("/com/my/icon/someimage.png");
Toolkit kit = Toolkit.getDefaultToolkit();
Image img = kit.createImage(url); // fails with null pointer exception
如果我不想作为一个网络启动应用程序来做这件事,那么我没有任何问题。它运行得很完美。Web启动=故障船。如果有什么不同的话,代码是签名的。正在使用的库文件是一个大罐子,里面有3个我创建的库文件,另外还有4个我自己没有编码的库文件。我也需要在库文件上签名吗?这本身可能是一个问题吗?
编辑:
如果我去掉这些代码行,网络应用程序运行时不会出现任何问题。
错误如下:
Exception in thread "AWT-EventQueue-2" java.lang.NullPointerException
at sun.net.util.URLUtil.getConnectPermission(Unknown Source)
at sun.awt.SunToolkit.checkPermissions(Unknown Source)
at sun.awt.SunToolkit.createImage(Unknown Source)
at DDSC.initComponents(DDSC.java:265)
at DDSC.<init>(DDSC.java:103)
尝试只使用文件名的getClassLoader().getResource()
不需要完整路径,getClassLoader()通过WebStart&也在本地:
String filename = "someimage.png";
Image resultImg = null;
URL url = getClassLoader().getResource(filename);
if (url != null)
resultImg = Toolkit.getDefaultToolkit().getImage(url);