ハイスコアをファイルに保存する Java ゲームを作成しましたが、appletviewer で動作するのに十分な権限をプログラムに与えるのに問題があります。
appletviewer がポリシー ファイルを無視しているようです。
にGame.java
コンパイルしGame.class
、Game.html
アプレットをロードして実行します。これらと同じディレクトリにpolicy
、以下の内容で名前を付けたポリシーファイルを持っています( で作成policytool
)。
grant codeBase "file:///mypath/Game.html" {
permission java.security.AllPermission;
};
次に、appletviewer
おそらく次のようにポリシーファイルを指定できます。
appletviewer -J-Djava.security.policy=policy /mypath/Game.html
しかし、この方法でゲームを開始すると、ハイスコア ファイルを読み取ることしかできず、書き込むことはできません。
Exception in thread "Thread-5" java.security.AccessControlException:
access denied (java.io.FilePermission highscore write)
さらに、上記の 1 行の appletviewer コマンドだけを含むシェル スクリプトを Finder でダブルクリックすると、読み取り権限さえありません。
Exception in thread "Thread-5" java.security.AccessControlException:
access denied (java.io.FilePermission highscore read)
問題の兆候の 1 つは、ポリシー ファイルの代わりに存在しないファイルの名前を指定すると、追加の警告やエラーなしで同じ動作が発生することです。
appletviewer -J-Djava.security.policy=notafile /mypath/Game.html
ゲーム自体 (ハイスコアのコードは別として) はどの場合でも正常に動作し、Eclipse ですべてを実行するとハイスコアのコードも正常に動作しますが、Eclipse もアプレットビューアーを使用して実行します。Eclipse は上記のようなポリシー ファイルも作成します。これもコマンド ラインから試しましたが、それでもコマンド ラインからは機能しませんでした。
http://docs.oracle.com/javase/tutorial/security/tour1/step3.htmlappletviewer
などのさまざまなチュートリアルに示されているとおりにコマンドを使用していますが、ポリシーファイルを見ていないようです。
appletviewer がポリシー ファイルを無視するのはなぜですか?