如何从文件中正确创建BufferedImage?

时间:2016-02-25 20:52:55

标签: java swing bufferedimage

我有这段代码:

package test;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class SwingSandbox {

    public static void main(String[] args) throws IOException {
        JFrame frame = buildFrame();

        final BufferedImage image = ImageIO.read(new File("C:\\Projects\\Test\\src\\test\\InterestCalcGraphic.jpg"));

        JPanel pane = new JPanel() {
            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                g.drawImage(image, 0, 0, null);
            }
        };


        frame.add(pane);
    }


    private static JFrame buildFrame() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setSize(200, 200);
        frame.setVisible(true);
        return frame;
    }


}

当我运行它时,我收到此错误消息:

    Exception in thread "main" javax.imageio.IIOException: Can't read input file!
    at javax.imageio.ImageIO.read(ImageIO.java:1301)
    at test.SwingSandbox.main(SwingSandbox.java:17)

错误消息让我相信我的文件路径不正确,但图像存储在我的文件目录中的Test-src-test下。我做错了什么?

3 个答案:

答案 0 :(得分:1)

ImageIO甚至没有尝试加载您的图片文件。你的文件本身有问题。例如。你的路径不正确。试着打电话给这个

File f = new File("C:\\Projects\\Test\\src\\test\\InterestCalcGraphic.jpg");
boolean value = f.canRead();

value变量的布尔值是多少?如果它false检查您的图像文件路径,文件名拼写错误等。

答案 1 :(得分:1)

我创建了一个名为graphics的文件夹,然后在我的路径中只使用了文件夹名称,没有别的。像这样:

final BufferedImage image = ImageIO.read(new File("graphics/a.jpg"));

答案 2 :(得分:0)

我认为你想要从类路径中读取文件。

final BufferedImage defaultImage =
    ImageIO.read(
        this.getClass().getResourceAsStream("/graphics/file.png"));

将文件放在src / main / resource / graphics中。 (对于maven默认值)