2016-02-25 109 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的默認設置)