2011-08-10 24 views
6

Tengo un archivo de imagen en mi proyecto. La jerarquía se ve así:Leyendo una imagen en Netbeans

Project hierarchy

Estoy intentando leer Manling.png en Manling.java utilizando este código:

public BufferedImage sprite; 

public Manling() 
{ 
    try 
    { 
    File file = new File("resources/Manling.png"); 
    sprite = ImageIO.read(file); 
    } catch (IOException e) {} 

    System.out.println(sprite.toString()); //This line is to test if it works 
} 

siempre consigo un NullPointerException en la cuenta de println, por lo Supongo que el camino está mal. Intenté mover la imagen a diferentes lugares del proyecto e intenté cambiar la ruta del archivo (por ejemplo, 'mine/resources/Manling.png' y '/resources/Manling.png'). ¿Algunas ideas?

Si quieres un ejemplo compilables completa, prueba este:

package minesscce; 

import javax.swing.*; 
import java.awt.*; 
import java.awt.image.*; 
import java.io.*; 
import javax.imageio.*; 
import java.net.URL; 

public class Mine extends JFrame 
{ 
private BufferedImage sprite; 

public static void main(String args[]) 
{ 
    Mine mine = new Mine(); 
} 

public Mine() 
{ 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setVisible(true); 
    setSize(800, 600); 
    setExtendedState(Frame.MAXIMIZED_BOTH); 
    setBackground(Color.WHITE); 

    try 
    { 
     File file = new File("resources/Manling.png"); 
     sprite = ImageIO.read(file); 
    } catch (IOException e) {} 

    System.out.println(sprite.toString()); 
} 

public void paint(Graphics g) 
{ 
    g.translate(getInsets().left, getInsets().top); 
    Graphics2D g2d = (Graphics2D)g; 

    g2d.drawImage(sprite, 0, 0, this); 
    Toolkit.getDefaultToolkit().sync(); 
    g2d.dispose(); 
} 

}

Sólo tienes que configurar el proyecto como éste, utilizando cualquier imagen que desee:

SSCCE

Respuesta

9

Probar

ImageIO.read(Mine.class.getResource("../minesscce.resources/Manling.png")); 

He aquí un ejemplo:

  • Jerarquía

enter image description here

  • Resultado

enter image description here

Y aquí está el código ...

public final class ImageResourceDemo { 
    private static BufferedImage bi; 

    public static void main(String[] args){ 
     try { 
      loadImage(); 

      SwingUtilities.invokeLater(new Runnable(){ 
       @Override 
       public void run() { 
        createAndShowGUI();    
       } 
      }); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    private static void loadImage() throws IOException{ 
     bi = ImageIO.read(
       ImageResourceDemo.class.getResource("../resource/avatar6.jpeg")); 
    } 

    private static void createAndShowGUI(){ 
     final JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setBackground(Color.WHITE); 
     frame.add(new JLabel(new ImageIcon(bi))); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
+0

Lo puse en funcionamiento cuando la imagen estaba en 'mine.resources' y la ruta era '../resources/Manling.png'. Realmente no entiendo por qué, pero no me voy a quejar. ¡Gracias! – Tharwen

0

Si no estoy equivocado, el directorio raíz de la aplicación es el directorio de proyecto o el directorio de origen. (No estoy seguro de cuál es exactamente)

Si es el directorio del proyecto, entonces resources/Manling.png es MineSSCCE/resources/Manling.png. ¡Nada está allí!

Si es el directorio de origen, resources/Manling.png es MineSSCCE/Source/resources/Manling.png. ¡Nada está allí tampoco!

La ubicación real es MineSSCCE/Source/minesscce/resources/Manling.png Es por eso que no funcionaba.