我关注zetcode Snake java games tutorial并始终收到此错误:
ImageIcon iid = new ImageIcon(this.getClass().getResource("ball.png"));
ball = iid.getImage();
Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)
at snake2.Board.<init>(Board.java:52)
at snake2.Snake.<init>(Snake.java:10)
at snake2.Snake.main(Snake.java:22)
我实际上只是复制并粘贴代码以了解它是如何工作的。它们也在合适的包装中;但是当我尝试运行它时,我总是会遇到这个错误。
答案 0 :(得分:12)
图像应与编译的类位于同一个包(OS术语中的文件夹)中。检查同一文件夹中是否同时包含.class
和.png
。如果没有,您可以在getResource(..)
中使用类路径相对路径,从/
开始
答案 1 :(得分:5)
试试这个:
ImageIcon iid = new ImageIcon(this.getClass()
.getClassLoader().getResource("ball.png"));
ball = iid.getImage();
确保图像与java文件位于同一文件夹中。
答案 2 :(得分:5)
尝试使用System.out.println(System.getProperty("java.class.path"));
查找.class文件的位置,并将图片放在此文件夹中。
答案 3 :(得分:3)
使用相对路径加载资源是一般风险,我总是建议使用绝对路径,所以
/ball.png
如果图像位于类路径的根目录,或者添加到该位置的路径。
答案 4 :(得分:1)
您必须将图像文件(ball.png)放入类路径中。更多详情,请查看the Javadoc。
答案 5 :(得分:0)
如果资源在你的类路径中,那么你应该尝试“this.getClass()。getClassLoader()。getResource(”ball.png“)”。要使用实际代码,ball.png需要位于.class文件所在的位置(即包内)。
答案 6 :(得分:0)
转到项目&gt;在eclipse中清理它会刷新包浏览器,你不会再遇到这个问题了。
答案 7 :(得分:0)
您可能需要将文件添加到构建资源中,如下所示:
<build>
<resources>
<resource>
<directory>path\to\resources</directory>
<includes>
<include>ball.png</include>
</includes>
</resource>
</resources>
答案 8 :(得分:0)
您只能使用图片的路径。我想这会对你有所帮助: 使用此:
ImageIcon iid = new ImageIcon("C:\\Users\\ranig\\My\\spaceinvaders\\ball.png");
注意: C:\\Users\\ranig\\My\\spaceinvaders\\ball.png
是ball.png图片的完整路径。
而不是:
ImageIcon iid = new ImageIcon(this.getClass().getResource("ball.png"));
注意:如果您只想尝试使用蛇码而只想获得输出。
答案 9 :(得分:0)
我会让你觉得简单。这是一个例子:
Icon bug = new ImageIcon(getClass().getResource("bug1.png"));
这里&#34; bug1.png&#34;是资源,如果它不可用,那么它可能会导致错误,如您在此处讨论的那样。
将图像导入到程序所在的同一目录中。
你也可以给它一个完整的路径
ImageIcon(getClass().getResource("C://me/file/bug1.png"));
答案 10 :(得分:-2)
找不到如此命名的资源。它需要与您调用它的.class文件位于同一目录中。见Javadoc。