0

请原谅我对 Java Webstart 的有限理解,因为我对此很陌生。

所以我让我的应用程序在我的计算机上的一个 JAR 文件中工作,在静态方法中使用这个片段(类扩展 JFrame):

ImageIcon image = new javax.swing.ImageIcon(window.getClass().getResource("/resources/img/loginWindowTop.jpg"));
//ImageIcon image = new ImageIcon(window.getClass().getResource("/resources/img/loginWindowTop.jpg")); // tried this too
JLabel imageLabel = new JLabel(image);
imageLabel.setBounds(rect);
window.add(imageLabel);

当直接从 JAR 文件在我的计算机上启动应用程序时,它可以工作。当使用 JNLP 文件从 Web 服务器进行测试时,应用程序崩溃并显示以下内容:

java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)
at gui.LoginWindow.create(LoginWindow.java:42)
at main.Starter.main(Starter.java:13)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.javaws.Launcher.executeApplication(Unknown Source)
at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
at com.sun.javaws.Launcher.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

如果有人能解释该怎么做,我将不胜感激。我在互联网上搜索了很长时间,但没有解决方案可以帮助我(还)。我希望这不是因为我正在使用静态 JFrame(在我的代码片段中称为窗口)?

4

2 回答 2

1

用 WinZip 或 7Zip 打开 jar 并查看路径是否确实/resources/img/loginWindowTop.jpg,并且区分大小写。(特别是在那种骆驼情况下,文件名应该在文件系统上。)类加载器会出现一些深奥的错误,然后你可以尝试而不是window.getClass...简单的getClass....

于 2012-04-21T19:35:29.067 回答
0

感谢您的提示,我终于找到了一种方法。由于我的类 LoginWindow 仅以静态方式使用,因此我不得不使用

ImageIcon image = new ImageIcon(LoginWindow.class.getResource("/resources/img/loginWindowTop.jpg"));

LoginWindow.getClass() 只能以非静态方式工作。

谢谢大家的意见,我希望这对其他人也有帮助!

于 2012-04-21T20:23:18.577 回答