1

ハイスコ​​アをファイルに保存する Java ゲームを作成しましたが、appletviewer で動作するのに十分な権限をプログラムに与えるのに問題があります。

appletviewer がポリシー ファイルを無視しているようです。

Game.javaコンパイルしGame.classGame.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 がポリシー ファイルを無視するのはなぜですか?

4

2 に答える 2

4

を使用して

grant codeBase "file:///mypath/Game.html" {
   permission java.security.AllPermission;
};

クラスファイル内のコードに実際に追加のアクセス許可を付与していません。

代わりにこれを試すことができます:

grant codeBase "file:///mypath/-" {
   permission java.security.AllPermission;
};

これによりAllPermission、/mypathとそのサブフォルダー内のすべてのクラスファイルとjarファイルに付与されます。この-文字は、このアクセス許可がそのフォルダー内のすべてのクラス/ jarファイルに適用され、すべてのサブフォルダーに再帰的に適用されることを示します。フォルダが1つだけ必要な場合は、*代わりに使用します。

codeBaseパラメータの指定方法の完全なリファレンスは、 http: //docs.oracle.com/javase/7/docs/technotes/guides/security/PolicyFiles.html#FileSyntaxにあります。

于 2012-01-08T14:21:42.433 に答える
0

Java SE7を搭載したMac OS10.8.4で上記のすべてを試しました。ファイアフォックスとサファリ。何も機能しませんでした。

ファイルを開いているjarファイルを呼び出して内部htmlファイルを開こうとしました。

Safari は Java を起動することさえできず、Firefox ではネストされたファイルを開くことができませんでした (メッセージは見つからなかったというものでしたが、私の推測では、ブラウザが Java にファイルを開くことを許可していなかったのです)。

代わりにターミナルでappletviewerを使用しましたが、驚くべきことにすべてのファイルが開かれました。

これらは私が Mathematica と JavaLive3D で書いた (約 12 MB のコード) インタラクティブなメカニズムの非常に複雑なファイルで、二度と見ることができないと思っていました.... MacPro で開くのに 20 分かかります。

于 2013-10-09T05:34:00.013 に答える