Class.getResource() returns null
I am trying to display pictures on the JPanel but I keep getting the error :
java.lang.IllegalArgumentException: input == null!
I don't understand what is happening.
Here is the code I am using:
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();
}
}
This just leads to me getting the error!
Stack trace produces the following:
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)
How can I solve this? I have checked the location of the image, and have tried from different locations and always get the same error!
I'm using the Netbeans IDE.
Assuming getClass()
returns com.foo.bar.MyActionListener
, getClass().getResource("img/foo.jpg")
looks for a file named foo.jpg
in the package com.foo.bar.img
. If the image is not in this package, or if it is in this package but its root directory is not in the classpath, the method will return null.
If the img folder is at the root of the classpath, you should use getClass().getResource("/img/foo.jpg")
(note the leading /
), or getClass().getClassLoader().getResource("img/foo.jpg")
.
You should give the relative path for your source file. For exemple if you have this:
src
--img
--classes
And you are in the classes
folder, you should write this:
getClass().getResource("../img/" +num.getText()+".jpg")