Java 如何从文件中正确创建BuffereImage?

Java 如何从文件中正确创建BuffereImage?,java,swing,bufferedimage,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.IOExcepti

我有以下代码:

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下。我做错了什么?

ImageIO甚至没有尝试加载您的图像文件。您的文件本身有问题。例如,您的路径不正确。试着称之为

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

value
变量的布尔值是什么?如果它
false
检查您的图像文件路径、文件名键入等。

ImageIO甚至没有尝试加载您的图像文件。您的文件本身有问题。例如,您的路径不正确。试着称之为

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

value
变量的布尔值是什么?如果它
false
检查您的图像文件路径、文件名键入等。

我创建了一个名为graphics的文件夹,然后只使用路径中的文件夹名,而不使用其他名称。像这样:

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

我创建了一个名为graphics的文件夹,然后只使用路径中的文件夹名,而不使用其他名称。像这样:

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

我想您应该改为从类路径读取文件

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

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

我认为您应该从类路径读取文件

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


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

由于某些原因,无法读取图像的可能副本,可能该图像不存在或不是受支持的图像格式它存在,因为它显示在文件目录中,怎么可能不支持jpgs?堆栈跟踪中是否存在任何原因异常?不。唯一的错误是我发布的错误。由于某种原因,可能无法读取图像的副本,可能它不存在或不是受支持的图像格式它存在,因为它显示在文件目录中,那么jpgs怎么可能不被支持呢?堆栈跟踪中有任何原因异常吗?没有。唯一的错误是我发布的错误。它是错误的,但我不知道为什么。我的文件路径似乎是正确的。
位于javax.imageio.imageio.read(imageio.java:1301)
似乎建议尝试其他方式的图像。也可以尝试使用前斜杠。我认为这在java中是可行的。C:/Projects/Test/…并尝试一个较短的路径,如位于C中的图像:/Projects@EthanJCRubik让我们一步一步来做:1。按照您的建议,将图像文件移动到
C:\\Projects
。在这之后尝试我的2行代码。2.如果问题不在路径中,请尝试将图像重命名为例如
a.jpg
,然后再次尝试我的两行代码。3.让我们知道:)这是假的,但我不明白为什么。我的文件路径似乎是正确的。
位于javax.imageio.imageio.read(imageio.java:1301)
似乎建议尝试其他方式的图像。也可以尝试使用前斜杠。我认为这在java中是可行的。C:/Projects/Test/…并尝试一个较短的路径,如位于C中的图像:/Projects@EthanJCRubik让我们一步一步来做:1。按照您的建议,将图像文件移动到
C:\\Projects
。在这之后尝试我的2行代码。2.如果问题不在路径中,请尝试将图像重命名为例如
a.jpg
,然后再次尝试我的两行代码。3.让我们知道:)