4

ボタンの画像を追加しましたが、そのフレームを実行すると、この例外がスローされます。なぜですか?助けてください。

init:

deps-jar:
compile-single:
run-single:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at javax.swing.ImageIcon.<init>(ImageIcon.java:138)
        at ClientGUI.IdAndPasswordFrame.initComponents(IdAndPasswordFrame.java:91)
        at ClientGUI.IdAndPasswordFrame.<init>(IdAndPasswordFrame.java:22)
        at ClientGUI.IdAndPasswordFrame$4.run(IdAndPasswordFrame.java:200)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
BUILD SUCCESSFUL (total time: 1 second)

138行目:

public ImageIcon (URL location) {
    this(location, location.toExternalForm());
}

line91:

 jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/yahoo_1.gif"))); // NOI18N

私はこの貧弱なチェック(Peter Lang推奨)を使用しています。これは次のとおりです。System.out.println(getClass()。getResource( "/ Images / yahoo_1.gif")); そしてそれはnullを返します、なぜですか?私を助けてください。

4

6 に答える 6

8

これは、をgetClass().getResource("/Images/yahoo_1.gif")返すことを意味しますnull

JavaDocは、これは次の場合に発生すると述べています

リソースが見つからなかったか、呼び出し元にリソースを取得するための適切な権限がありません。

  1. getResource本当に戻ってくるかどうかを確認してくださいnull
    System.out.println(getClass().getResource("/Images/yahoo_1.gif"));

  2. パスが正しく、クラスパスに含まれていることを確認してください。

編集

NetBeansで試してみました。次の構造を作成しました

Source Packages
  Images
    yahoo_1.gif

そしてあなたのコードはうまくいきました。これはあなたの構造ですか?

アプリケーションを右クリックして、を選択してみてくださいClean and Build

于 2010-01-07T11:42:06.963 に答える
4

これを修正するには、イメージをsrcディレクトリではなくbinディレクトリにコピーする必要があります。

そうしないと、getClass()。getResource( "image.png")で常にnullが発生します。パスはnullではなく、上記のように設定できます。必要なイメージを、プロジェクトの.classファイルが配置されているバイナリディレクトリ内にコピーする場合に限ります。

これで問題が修正されました。私がこれを手伝ったかどうか教えてください。

イオアナ

于 2010-11-11T21:56:43.250 に答える
2

私も同じ問題を抱えていました。私のために働いたのは:

  1. jarファイルまたはbinフォルダー(.classファイルがあるフォルダー)を調べて、イメージのパスを確認します。
  2. リストアイテム
于 2016-05-24T20:32:33.520 に答える
1

getClass().getResource("/Images/yahoo_1.gif")戻り値のようnullです。つまり、クラスパスに.gifが見つかりません。(画像対画像多分?)

于 2010-01-07T11:42:52.593 に答える
1

渡されるURLは、次の行からnullです。

getClass().getResource("/Images/yahoo_1.gif")

JDKドキュメントから:

[getResource(..)returns]リソースを読み取るためのURLオブジェクト、またはリソースが見つからなかった場合、または呼び出し元にリソースを取得するための適切な特権がない場合はnull

多分あなたは( "Images / yahoo_1.gif")を意味しました-つまり、相対パスは絶対ではありませんか?

于 2010-01-07T11:44:06.163 に答える
0
private class HandlerClass implements ActionListener{
        public void actionperformed(ActionEvent event){
            JOptionPane.showMessageDialog(null, String.format("%s", event.getActionCommand()));
        }

}
于 2016-11-21T11:53:47.713 に答える