2011-08-10 31 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 这就是为什么它不起作用。