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を使用しています。
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")
を使用する必要があります。
ソースファイルの相対パスを指定する必要があります。たとえば、これがある場合:
src
--img
--classes
そして、あなたはclasses
フォルダーにいるので、次のように書く必要があります。
getClass().getResource("../img/" +num.getText()+".jpg")