1

画像ファイルの読み取り時に 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)

イメージ IO は、Java アプリケーションとして実行中に正常に動作します。

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);
4

2 に答える 2

3

それが機能するはずの方法です。アプレットはローカル ファイルにアクセスできません。ファイル システムへのアクセスが許可された署名付きアプレットが必要になる場合があります。

于 2012-09-27T19:26:05.270 に答える
0

これは予期されることです。

Java アプレットがすべてのローカル ファイルに自由にアクセスできるとしたら、だれかのローカル マシンを攻撃するのがいかに簡単か想像してみてください。java.io.FileJava アプリケーションを作成しているときに、ファイルを読み取るために使用できます。ただし、Java アプレットを作成している場合は、入力ファイルを jar の一部としてパッケージ化し、そのファイルに「リソース」としてアクセスする必要があります。

この問題を解決するには、次の方法を使用する必要があります。

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

また

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

実行するのは非常に簡単で、簡単な説明と使用法については、こちらを参照してください

于 2012-09-27T19:35:10.223 に答える