2011-08-10 80 views
6

我的項目中有一個圖像文件。層次結構是這樣的:在Netbeans中讀取圖像

Project hierarchy

我想使用此代碼讀取Manling.png到Manling.java:

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 
} 

我總是在println說法得到了NullPointerException,使我認爲路徑是錯誤的。我嘗試將圖像移動到項目中的不同位置,並嘗試更改文件路徑(例如'mine/resources/Manling.png'和'/resources/Manling.png')。有任何想法嗎?

如果你想有一個完整的編譯例如,試試這個:

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

}

剛剛成立這樣的項目,使用任何你想要的形象:

SSCCE

回答

9

試試

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

下面是一個例子:

  • 層次

enter image description here

  • 結果

enter image description here

而這裏的代碼 ...

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

當我的圖片在'mine.resources'和路徑是'../resources/Manling.png'時,我得到了它的工作。我不明白爲什麼,但我不會抱怨。謝謝! – Tharwen

0

如果我沒看錯,你的應用程序的根目錄是項目目錄或源目錄。 (不知道究竟是哪一個)

如果是工程目錄,那麼resources/Manling.pngMineSSCCE/resources/Manling.png。沒有什麼!

如果它是源目錄,resources/Manling.pngMineSSCCE/Source/resources/Manling.png。也沒有什麼!

實際位置是MineSSCCE/Source/minesscce/resources/Manling.png 這就是爲什麼它不起作用。