web-dev-qa-db-ja.com

Class.getResource()はnullを返します

JPanelに画像を表示しようとしていますが、エラーが発生し続けます:

Java.lang.IllegalArgumentException:input == null!

何が起こっているのかわかりません。

これが私が使用しているコードです:

public void actionPerformed(ActionEvent e) {
    try {
        Image image=ImageIO.read(getClass().getResource("img/" +num.getText()+".jpg"));

        Image resized = image.getScaledInstance(200, 200, 100);
        pictureFrame.setIcon(new ImageIcon(resized));
    } catch (Exception ex){
        ex.printStackTrace();
    }
}

これは私がエラーを受け取ることにつながるだけです!

スタックトレースは次を生成します。

Java.lang.IllegalArgumentException: input == null!
    at javax.imageio.ImageIO.read(ImageIO.Java:1362)
    at work.Item.actionPerformed(Item.Java:96)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.Java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.Java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.Java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.Java:242)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.Java:236)
    at Java.awt.Component.processMouseEvent(Component.Java:6297)
    at javax.swing.JComponent.processMouseEvent(JComponent.Java:3275)
    at Java.awt.Component.processEvent(Component.Java:6062)
    at Java.awt.Container.processEvent(Container.Java:2039)
    at Java.awt.Component.dispatchEventImpl(Component.Java:4660)
    at Java.awt.Container.dispatchEventImpl(Container.Java:2097)
    at Java.awt.Component.dispatchEvent(Component.Java:4488)
    at Java.awt.LightweightDispatcher.retargetMouseEvent(Container.Java:4575)
    at Java.awt.LightweightDispatcher.processMouseEvent(Container.Java:4236)
    at Java.awt.LightweightDispatcher.dispatchEvent(Container.Java:4166)
    at Java.awt.Container.dispatchEventImpl(Container.Java:2083)
    at Java.awt.Window.dispatchEventImpl(Window.Java:2489)
    at Java.awt.Component.dispatchEvent(Component.Java:4488)
    at Java.awt.EventQueue.dispatchEventImpl(EventQueue.Java:668)
    at Java.awt.EventQueue.access$400(EventQueue.Java:81)
    at Java.awt.EventQueue$2.run(EventQueue.Java:627)
    at Java.awt.EventQueue$2.run(EventQueue.Java:625)
    at Java.security.AccessController.doPrivileged(Native Method)
    at Java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.Java:87)
    at Java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.Java:98)
    at Java.awt.EventQueue$3.run(EventQueue.Java:641)
    at Java.awt.EventQueue$3.run(EventQueue.Java:639)
    at Java.security.AccessController.doPrivileged(Native Method)
    at Java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.Java:87)
    at Java.awt.EventQueue.dispatchEvent(EventQueue.Java:638)
    at Java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.Java:269)
    at Java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.Java:184)
    at Java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.Java:174)
    at Java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.Java:169)
    at Java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.Java:161)
    at Java.awt.EventDispatchThread.run(EventDispatchThread.Java:122)

どうすればこれを解決できますか?画像の場所を確認しましたが、さまざまな場所から試しましたが、常に同じエラーが発生します。

NetbeansIDEを使用しています。

10
user2201158

getClass()が_com.foo.bar.MyActionListener_を返すと仮定すると、getClass().getResource("img/foo.jpg")はパッケージ_foo.jpg_内の_com.foo.bar.img_という名前のファイルを探します。画像がこのパッケージにない場合、または画像がこのパッケージにあるがルートディレクトリがクラスパスにない場合、メソッドはnullを返します。

Imgフォルダーがクラスパスのルートにある場合は、getClass().getResource("/img/foo.jpg")(先頭の_/_に注意)またはgetClass().getClassLoader().getResource("img/foo.jpg")を使用する必要があります。

24
JB Nizet

ソースファイルの相対パスを指定する必要があります。たとえば、これがある場合:

src
 --img
 --classes

そして、あなたはclassesフォルダーにいるので、次のように書く必要があります。

getClass().getResource("../img/" +num.getText()+".jpg")
1
Omar Chaabouni