【问题标题】:Reading an image in Netbeans在 Netbeans 中读取图像
【发布时间】:2011-08-10 16:11:44
【问题描述】:

我的项目中有一个图像文件。层次结构如下所示:

我正在尝试使用以下代码将 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();
}

}

只需像这样设置项目,使用您想要的任何图像:

【问题讨论】:

    标签: java swing path bufferedimage


    【解决方案1】:

    试试

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

    这是一个例子:

    • 层次结构

    • 结果

    这是代码...

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

    【讨论】:

    • 当图像位于“mine.resources”并且路径为“../resources/Manling.png”时,我可以正常工作。我真的不明白为什么,但我不会抱怨。谢谢!
    【解决方案2】:

    如果我没记错的话,你的应用程序的根目录是项目目录或源目录。 (不确定到底是哪一个)

    如果是项目目录,那么resources/Manling.png 就是MineSSCCE/resources/Manling.png。什么都没有!

    如果是源目录,resources/Manling.png就是MineSSCCE/Source/resources/Manling.png。什么也没有!

    实际位置是MineSSCCE/Source/minesscce/resources/Manling.png 这就是它不起作用的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-10
      • 1970-01-01
      • 2010-11-22
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      相关资源
      最近更新 更多