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.让我们知道:)