web-dev-qa-db-ja.com

Java getClass()。getResource( "file")はNullPointerExceptionを引き起こします

私は zetcode 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)

実際にコードをコピーして貼り付け、どのように機能するかを確認しました。それらも適切なパッケージに入っています。しかし、実行しようとすると、常にこのエラーが発生します。

15
kapitanluffy

イメージは、コンパイルされたクラスと同じパッケージ(OS用語ではフォルダー)にある必要があります。同じフォルダに_.class_と_.png_の両方があるかどうかを確認します。そうでない場合は、_/_で始まるgetResource(..)でクラスパス相対パスを使用できます。

12
Bozho

これを試して:

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

画像がJavaファイルと同じフォルダにあることを確認してください。

6
Harry Joy

System.out.println(System.getProperty("Java.class.path"));を使用して、.classファイルの場所を確認し、このフォルダーに画像を配置してください。

5
Rohit Deshmukh

相対パスを使用してリソースを読み込むことは一般的に危険です。常に絶対パスを使用することをお勧めします。

 /ball.png

画像がクラスパスのルートにある場合、または場所へのパスを追加します。

3
MeBigFatGuy

画像ファイル(ball.png)をクラスパスに入れる必要があります。詳細は Javadoc をご覧ください。

1
jumperchen

Eclipseで[プロジェクト]> [クリーン]に移動すると、パッケージエクスプローラーが更新され、この問題は発生しなくなります。

0
vara prasad

画像のパスのみ使用できます。これはあなたに役立つと思います:これを使用してください:

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"));

注:uがスネークコードのみを試し、出力のみを取得する場合。

0
developJadon

次のようなビルドリソースにファイルを追加する必要がある場合があります。

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

リソースがクラスパスにある場合は、「this.getClass()。getClassLoader()。getResource( "ball.png")」を試す必要があります。実際のコードが機能するためには、ball.pngが.classファイルがある場所(つまり、パッケージ内)にある必要があります。

0
Anil G

私はあなたのためにそれを簡単にします。次に例を示します。

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

ここで「bug1.png」はリソースであり、使用できない場合は、ここで説明したようにエラーが発生する可能性があります。

プログラムが存在する同じディレクトリにイメージをインポートします。

また、それに完全なパスを与えることもできます

ImageIcon(getClass().getResource("C://me/file/bug1.png"));
0
Muhammad Ali