2016-02-25 99 views
0

我有这样的代码:如何从文件正确创建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下。我究竟做错了什么?

+0

可能的重复http://stackoverflow.com/questions/5713096/javax-imageio-iioexception-for-apparently-no-reason –

+0

图像无法读取出于某种原因,也许它不存在或不支持的图像格式 – MadProgrammer

+0

它存在,因为它显示在文件目录中,并且不支持jpgs? –

回答

1

ImageIO甚至没有尝试加载您的图像文件。文件本身有问题。例如。你的路径不正确。尝试把这种

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

什么是value变量的布尔值?如果它false检查您的图像文件路径,文件名错字等

+0

这是错误的,但我不明白为什么。我的文件路径似乎是正确的。 –

+0

'在javax.imageio.ImageIO.read(ImageIO.java:1301)'似乎暗示否则 – MadProgrammer

+0

尝试一个不同的图像。也尝试使用正斜杠。我认为这在java中有效。 C:/ Projects/Test/... – ssimm

1

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

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

我想你想从classpath中读取文件。

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

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