質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Javaアプレット

Javaアプレットは、Webページに組み込まれて実行されるJavaアプリケーションの形式です。Java SE 11で廃止となりました。

Q&A

解決済

2回答

4245閲覧

画像表示がうまくされない

ryohasegawa

総合スコア437

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Javaアプレット

Javaアプレットは、Webページに組み込まれて実行されるJavaアプリケーションの形式です。Java SE 11で廃止となりました。

0グッド

0クリップ

投稿2016/05/06 14:33

編集2016/05/06 16:57

java

1try{ 2 java.io.File file = new java.io.File("../Image/nc74842.png"); //ファイルを開く 3 m_bi = javax.imageio.ImageIO.read(file); //画像全体を読み込む 4 }catch(java.io.IOException e){ 5 System.out.println("画像が見つかりません NoImage"); 6 }

画像の参照のデフォルトが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.<init>(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)

エラーの現状をものすごく簡単にいうと、../をつけずに実行すると「画像がみつかりません」のエラーメッセージが出るんですが、../をつけるとアプレットビューアーが真っ白けの画面になり、下にアプレットが初期化されていませんと表示します。わけがわからないです。

../をつけない
イメージ説明
イメージ説明

../をつけるとこうなる
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Java Appletの制限と思われます。

たしか、Java Appletは同一階層またはその配下しかアクセスできないというセキュリティ上の制限があったはずです(ただし、根拠になる資料は見つけられませんでした)。ポリシーファイルを作れば制限は解除できるかも知れませんが、署名突き出ないと解除できる制限も限られているようです。ただ、1.8ではポリシーファイルを設定してもうまくいかない事例もあり、色々と試す必要があるかも知れません。

※ Java Appletという技術自体が廃れつつあり、最新のJavaでの動作については資料が大変少ないです。また、Java Appletはバージョンを重ねる度に制限が増えており、古い情報は役に立たない場合もあります。

投稿2016/05/06 23:20

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まずこうする

エラー名のコピー
次にこう

ググる
そうしてこう

ほら、簡単でしょ?

投稿2016/05/06 14:58

otftrough

総合スコア476

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryohasegawa

2016/05/06 15:06

特にこれというものに当てはまらないのですが・・・ ディレクトリを出るとエラーが出るので、出れないのでしょうか?
otftrough

2016/05/06 15:23

フルパスでもダメ? 管理者権限で実行してみた?
ryohasegawa

2016/05/06 15:32

ディレクトリ関係の図を見てもらえばわかると思いますが、フルパスで書いています。 コマンドプロンプトは管理者権限です
otftrough

2016/05/06 15:44

すみません言葉間違えてました、フルパスではなく絶対パスと言いたかった
ryohasegawa

2016/05/06 15:56

相対パスだと思います。今の環境では、デフォルトの参照場所はbin内なので、binディレクトリから見ての場所を指定したと思っています。
otftrough

2016/05/06 16:17

うーん、こっちでもできるだけエラー出るように頑張ったけど再現できなかった。 ちなみに、AccessControlContext.javaの472行目ってなによ?
ryohasegawa

2016/05/06 16:48

すいません、どうやってみすんですか?
otftrough

2016/05/06 16:50

は?あなたが今書いているjavaファイルでしょ。 AccessControlContextってクラス名はあなたが書いたんでしょ?
ryohasegawa

2016/05/06 16:53

エラーの現状をものすごく簡単にいうと、../をつけずに実行すると「画像がみつかりません」のエラーメッセージが出るんですが、../をつけるとアプレットビューアーが真っ白けの画面になり、下にアプレットが初期化されていませんと表示します。わけがわからないです。
otftrough

2016/05/06 17:25

つまり、new java.io.File("../Image/nc74842.png")はサンプルをそのまま書いているだけで、全く意味は分かっていないと? とりあえず、java.security.AccessControlException: access denied ("java.io.FilePermission" "..\Image\nc74842.png" "read") ...と例外メッセージが出るのであれば、 プログラムは正常に動いています。 別の画像ファイルでも試してみましたか?
raccy

2016/05/06 23:27

参考に出されているサイトはJDK1.3や1.4と情報が古く、また、Applet特有の制限等についても言及が無いため、役に立つ物とは思えません。 また、AccessControlContext.javaを書いたのはSun(現在保守しているのはOracle)です。java.security.AccessControlContext.checkPermissionはJavaに初めからあるメソッドです。本当にJavaの仕組みやライブラリがどうなっているのかをわかっていますか?javaからはじまるパッケージのクラスをユーザーが作ることは本来あり得ません。
ryohasegawa

2016/05/07 02:17

なるほど、色々教えてもらいましたが結果階層を抜け出せれないようです。
otftrough

2016/05/07 07:57

アプレットって、思ってたより不便なんだね。 お役に立てず申し訳ない
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問