質問: javax.imageio.ImageIO.read(file); //画像全体を読み込む }catch(java.io.IOException e){ System.out.println("画像が見つかりません NoImage"); } ``` 画像の参照のデフォルトがbinになっているのですが、一つ上の階層にあるImageファイルの中の画像を呼び出したく、`../Image/nc74842.png`このように書くと以下の様なエラーが出ます。binファイルの中にImageフォルダを作りその中に画像を入れて呼び出すのならば問題なく動くんですが・・・ 以下に図でディレクトリ構造を書いてみました。 プログラム ├bin │ ├Main.class │ └Main.html ├Image │ └nc74842.png └src java.security.AccessControlException: access denied ("java.io.FilePermission" "..\Image\nc74842.png" "read") at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472) at java.security.AccessController.checkPermission(AccessController.java:884) at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) at java.lang.SecurityManager.checkRead(SecurityManager.java:888) at java.io.File.canRead(File.java:763) at javax.imageio.ImageIO.read(ImageIO.java:1300) at MyPanel.(MyPanel.java:12) at Main.init(Main.java:5) at sun.applet.AppletPanel.run(AppletPanel.java:434) at java.lang.Thread.run(Thread.java:745) エラーの現状をものすごく簡単にいうと、../をつけずに実行すると「画像がみつかりません」のエラーメッセージが出るんですが、../をつけるとアプレットビューアーが真っ白けの画面になり、下にアプレットが初期化されていませんと表示します。わけがわからないです。 ../をつけない ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/d30cca4c861418333a6f3c07578a3919.png) ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/191534d6d386d211bd7758d63eaf2f3b.png) ../をつけるとこうなる ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/98044f2634c680bd86f535d3178ca481.png)
回答: Java Appletの制限と思われます。 たしか、Java Appletは同一階層またはその配下しかアクセスできないというセキュリティ上の制限があったはずです(ただし、根拠になる資料は見つけられませんでした)。ポリシーファイルを作れば制限は解除できるかも知れませんが、署名突き出ないと解除できる制限も限られているようです。ただ、1.8ではポリシーファイルを設定してもうまくいかない事例もあり、色々と試す必要があるかも知れません。 ※ Java Appletという技術自体が廃れつつあり、最新のJavaでの動作については資料が大変少ないです。また、Java Appletはバージョンを重ねる度に制限が増えており、古い情報は役に立たない場合もあります。