Java getClass()。getResource(“file”)导致NullPointerException

时间:2011-04-24 07:48:21

标签: java nullpointerexception embedded-resource imageicon

我关注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)

我实际上只是复制并粘贴代码以了解它是如何工作的。它们也在合适的包装中;但是当我尝试运行它时,我总是会遇到这个错误。

11 个答案:

答案 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。