16

我正在关注Snake Java 游戏教程,但总是收到此错误:

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)

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

4

11 回答 11

15

图像应该与编译的类在同一个包(操作系统术语中的文件夹)中。检查您是否同时拥有.class.png在同一个文件夹中。如果没有,您可以在 , 中使用类路径相对路径getResource(..),从/

于 2011-04-24T07:53:00.710 回答
8

尝试这个:

ImageIcon iid = new ImageIcon(this.getClass()
                  .getClassLoader().getResource("ball.png"));
ball = iid.getImage();

确保图像与 java 文件位于同一文件夹中。

于 2011-04-24T07:53:44.750 回答
6

尝试使用System.out.println(System.getProperty("java.class.path"));找出 .class 文件的位置并将图像放在此文件夹中。

于 2013-05-24T14:56:16.237 回答
4

使用相对路径加载资源通常是有风险的,我总是建议使用绝对路径,所以这样做

 /ball.png

如果图像位于类路径的根目录,或者添加到该位置的路径。

于 2011-04-24T07:51:04.337 回答
2

您必须将图像文件(ball.png)放入您的类路径中。更多详细信息,请查看Javadoc

于 2011-04-24T07:53:49.430 回答
0

如果资源在您的类路径中,那么您应该尝试“this.getClass().getClassLoader().getResource("ball.png")”。为了让您的实际代码正常工作,ball.png 需要位于您的 .class 文件所在的位置(即,在包内)。

于 2011-04-24T07:51:53.300 回答
0

在 Eclipse 中转到 project >clean 它将刷新包资源管理器,您将不再面临这个问题。

于 2015-06-25T06:31:21.003 回答
0

您可能需要将文件添加到构建资源中,如下所示:

<build>
    <resources>
        <resource>
            <directory>path\to\resources</directory>
            <includes>
                <include>ball.png</include>
            </includes>
        </resource>
    </resources>

于 2016-11-07T20:27:45.567 回答
0

我会让你变得简单。这是一个例子:

Icon bug = new ImageIcon(getClass().getResource("bug1.png"));

这里的“bug1.png”是资源,如果它不可用,那么它可能会导致错误,正如您在此处讨论的那样。

将图像导入程序所在的同一目录。

你也可以给出完整的路径

ImageIcon(getClass().getResource("C://me/file/bug1.png"));
于 2017-02-20T19:48:35.440 回答
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"));

注意:如果您只想尝试蛇代码并且只想获得输出。

于 2016-11-08T10:48:58.907 回答
-2

未找到如此命名的资源。它需要与您从中调用它的 .class 文件位于同一目录中。请参阅 Javadoc。

于 2011-04-24T07:50:32.497 回答