2011-08-10 22 views
6

Mam plik obrazu w moim projekcie. Hierarchia wygląda następująco:Czytanie obrazu w Netbeans

Project hierarchy

Próbuję odczytać Manling.png do Manling.java przy użyciu tego kodu:

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 
} 

zawsze uzyskać NullPointerException na rachunku println, więc Zakładam, że ścieżka jest błędna. Próbowałem przenieść obraz do różnych miejsc w projekcie i próbowałem zmienić ścieżkę pliku (np. "Moje/zasoby/Manling.png" i "/resources/Manling.png"). Jakieś pomysły?

Jeśli chcesz pełną compilable przykład, spróbuj tego:

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

}

Wystarczy skonfigurować projekt tak, stosując dowolny obraz, który ma:

SSCCE

Odpowiedz

9

Wypróbuj

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

Oto przykład:

  • Hierarchia

enter image description here

  • Wynik

enter image description here

A oto kod ...

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

Uruchomiłem go, gdy obraz był w "mine.resources", a ścieżka brzmiała "../resources/Manling.png". Naprawdę nie rozumiem dlaczego, ale nie zamierzam narzekać. Dzięki! – Tharwen

0

Jeśli się nie mylę, katalog główny aplikacji jest katalog projektu lub katalogu źródłowego. (Nie jestem pewien, który to dokładnie)

Jeśli jest to katalog projektu, to resources/Manling.png to MineSSCCE/resources/Manling.png. Nic tam nie ma!

Jeśli jest to katalog źródłowy, resources/Manling.png to MineSSCCE/Source/resources/Manling.png. Nic tam też nie ma!

Rzeczywista lokalizacja to MineSSCCE/Source/minesscce/resources/Manling.png . Dlatego nie działała.