2013-03-22 15 views
6

Sto cercando di visualizzare le immagini sul JPanel, ma continuo a ricevere l'errore:Class.getResource() restituisce null

java.lang.IllegalArgumentException: ingresso == null!

Non capisco cosa sta succedendo.

Ecco il codice che sto usando:

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(); 
    } 
} 

Questo porta solo a me ottenere l'errore!

traccia Stack produce il seguente:

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) 

Come posso risolvere questo problema? Ho controllato la posizione dell'immagine e ho provato da posizioni diverse e ottengo sempre lo stesso errore!

Sto utilizzando l'IDE Netbeans.

+2

'getClass() getResource ("img /" + num.getText () + ". jpg") 'restituisce' null'. * Restituisce: Un oggetto URL o null se nessuna risorsa con questo nome è trovata * – Esailija

+0

in base al tuo post, dovrebbe essere facile capire qual è il problema utilizzando la modalità di debug – Tako

+0

La tua directory di lavoro corrente non è quella che ti aspetti che sia ? Inoltre, hai scollegato '" img/"+ num.getText() +". Jpg "' per assicurarti che sia quello che ti aspetti? – tjameson

risposta

21

Supponendo getClass() rendimenti com.foo.bar.MyActionListener, getClass().getResource("img/foo.jpg") cerca un file chiamato foo.jpg nel pacchetto com.foo.bar.img. Se l'immagine non è in questo pacchetto, o se è in questo pacchetto ma la sua directory radice non è nel classpath, il metodo restituirà null.

Se la cartella img si trova nella radice del classpath, è necessario utilizzare getClass().getResource("/img/foo.jpg") (notare il numero iniziale /) o getClass().getClassLoader().getResource("img/foo.jpg").

+0

come faccio a farlo funzionare .. provo rinominando l'immagine che ho nella mia cartella di immagini per piombare? o semplicemente prova il codice dato? – user2201158

+0

No. Assicurati di mettere la cartella img nella posizione corretta. Oppure cambia il percorso utilizzato per accedere all'immagine in modo che la trovi dove si trova. Senza dire dove si inserisce la cartella img, non posso dire quale percorso si dovrebbe usare. –

+0

la cartella immagini è attualmente all'interno della cartella src sotto questo percorso C: \ Documents and Settings \ Administrator \ My Documents \ Work – user2201158

3

È necessario fornire il percorso relativo per il file di origine. Per exemple se avete questo:

src 
--img 
--classes 

E voi siete nella cartella classes, si dovrebbe scrivere questo:.

getClass().getResource("../img/" +num.getText()+".jpg") 
Problemi correlati