2012-09-27 67 views
1

的Java拋出一個異常:的Java IO無法讀取輸入文件在Java小程序讀取圖片文件時

javax.imageio.IIOException: Can't read input file! 
at javax.imageio.ImageIO.read(ImageIO.java:1275) 
at UI.readMatrix(UI.java:27) 
at MazeViewControl.init(MazeViewControl.java:45) 
at sun.applet.AppletPanel.run(AppletPanel.java:424) 
at java.lang.Thread.run(Thread.java:680) 

的形象,而作爲Java應用程序運行的IO工作正常:

public class MazeViewControl extends JApplet { 
UI ui; 
MazeView view; 
Maze maze; 
int theme; 
int option; 
String filename="src/maze0.bmp"; 

public void init() { 
    ui=new UI(); 
    maze=new Maze(); 
     try { 
      ui.readMatrix("src/maze0.bmp", maze, 1, 0, 0,0,319,239); 
     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 

public class UI { 
    public UI(){ 
     return; 
    } 
/** 
    * read and construct the map from a txt file 
    * @param filename 
    * @throws IOException 
    */ 
    public void readMatrix(String filename, Maze m, int theme, int option, int sx, int sy, int ex, int ey) throws IOException{ 
     /* pre-read the file*/ 

     //Create file for the source 
     File input = new File(filename); 
     int rows=0; 
     int columns=0; 
     //Read the file to a BufferedImage 
     // Surround this with try/catch or have your method 
     // throw an exception 
     System.out.println(filename); 
     BufferedImage image = ImageIO.read(input); 

回答

3

即它應該如何工作。小程序無法訪問本地文件。您可能需要一個授權訪問文件系統的簽名小程序。

+0

謝謝!文件選擇器能夠通過這種方式建立連接嗎? –

+0

https://www.coderanch.com/how-to/java/HowCanAnAppletReadFilesOnTheLocalFileSystem –

0

這是預期的。

如果一個Java applet可以自由訪問所有本地文件,想象一下攻擊某人的本地機器是多麼容易。在編寫Java應用程序時,您可以使用java.io.File來讀取文件。但是,如果您正在編寫Java小應用程序,則必須將輸入文件打包爲jar的一部分,並將該文件作爲「資源」來訪問:

爲了解決此問題,您需要使用以下方法:

YourClass.class.getClassLoader().getResourceAsStream("yourfile.txt") 

InputStream inputStream = classLoader.getResourceAsStream("yourfile.txt") 

這是很容易做到,這種快速的解釋和用法,可以發現here