我正在制作一个'Pong'的基本游戏。除了我需要删除的一些小故障之外,我已经完成了游戏。游戏在netbeans中完美运行,但是如果我创建一个jar文件,则会出现错误导致它无法正常工作。 我对java很新,但我相信它与我的代码寻找图像有关,但图像尚未加载。这是错误。 如何在jar文件中的netbeans之外使用它?
C:\Users\michael>java -jar "C:\Users\michael\Documents\NetBeansProjects\Pong\dis
t\Pong.jar"
Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)
at pong.BallMainMenu.<init>(BallMainMenu.java:19)
at pong.Board.gameInit(Board.java:93)
at pong.Board.addNotify(Board.java:86)
at java.awt.Container.addNotify(Unknown Source)
at javax.swing.JComponent.addNotify(Unknown Source)
at java.awt.Container.addNotify(Unknown Source)
at javax.swing.JComponent.addNotify(Unknown Source)
at java.awt.Container.addNotify(Unknown Source)
at javax.swing.JComponent.addNotify(Unknown Source)
at javax.swing.JRootPane.addNotify(Unknown Source)
at java.awt.Container.addNotify(Unknown Source)
at java.awt.Window.addNotify(Unknown Source)
at java.awt.Frame.addNotify(Unknown Source)
at java.awt.Window.show(Unknown Source)
at java.awt.Component.show(Unknown Source)
at java.awt.Component.setVisible(Unknown Source)
at java.awt.Window.setVisible(Unknown Source)
at pong.Pong.<init>(Pong.java:16)
at pong.Pong.main(Pong.java:23)
答案 0 :(得分:2)
我怀疑您正在编写相对于工作目录的文件URL,这在NetBeans中执行时可能会有所不同(取决于从控制台运行它时执行它的位置)。
例如,从netbeans项目运行时,工作目录很可能是C:\ Users \ michael \ Documents \ NetBeansProjects \ Pong,其他示例中工作目录的位置只是“C:\ Users \ michael” \“
假设您正在从路径“myimages / test.jpg”加载图像。当从netbeans运行时,这将变为“C:\ Users \ michael \ Documents \ NetBeansProjects \ Pong \ myimages \ test.jpg”,并且在另一个示例中它将变为“C:\ Users \ michael \ myimages \ test.jpg”
尝试使用以下内容来访问资源
getClass().getResource("/myimage/test.jpg");
http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/ClassLoader.html#getResource(java.lang.String)
答案 1 :(得分:0)
您是否已将Java JDK和外部库(.jar文件)添加到系统路径变量中?
在使用Netbeans时,您可以正确使用此来源How to deploy Java Project using Netbeans。 要设置Java的系统路径,请查看this链接。它可能会因您的平台而异;即Windows,MacOS等。