1

私は現在ゲームに取り組んでおり、user.home ディレクトリからゲームをロードできる JFrame ローダーを作成しましたが、最近、Web アプレットにもそれが必要であると判断しました。

JFrame ローダーを実行すると、ゲームが正常に読み込まれ、ファイルがチェックされて開きます。(ゲームと JFrame の両方が署名されています) 次を使用して、アプレットからメソッドを読み込んで呼び出すことができます。

m.invoke(null, (Object) new String[]{textPack, font, currVersionStr,saveDir}, null, null, this);

しかし、アプレットがそれを読み込もうとすると、次のエラーが発生します。ゲームを正常に読み込めますが、保存されたオプションをコードで読み込もうとすると、次のエラーが発生します。

 File f = new File(OS.saveDir + OS.fileSeparator + "Options.keys");
    if (!f.exists()) {
        try {
            f.createNewFile();
            saveKeys();
        } catch (IOException ex) {
            Logger.getLogger(Configuration.class.getName()).log(Level.SEVERE, null, ex);
        }

次のエラーが表示されます。

2013 年 3 月 14 日 11:10:21 PM core.GameEngine 実行 SEVERE: null java.security.AccessControlException: アクセスが拒否されました ("java.io.FilePermission" "C:\Users\Jake.Zombies\Options.keys" "read" ) で java.security.AccessControlContext.checkPermission(不明なソース) で java.security.AccessController.checkPermission(不明なソース) で java.lang.SecurityManager.checkPermission(不明なソース) で java.lang.SecurityManager.checkRead(不明なソース) でcore.Configuration.onStartup(Configuration.java:105) で core.Configuration.loadKeys(Configuration.java:123) で java.io.File.exists (不明なソース) が core.GameEngine.run(GameEngine.java:76) で

行 if(!f.exists()) は Configuration.java:123 です

私の問題は、JFrameローダー(署名済み)では正常にロードされますが、アプレット(署名済み)ではロードされないことです

どんな助けでも大歓迎です、ありがとう。

編集: アプレット ローダーはファイルをチェックし、最新のものを正常にダウンロードできます。問題が発生するのは、ロードするゲームにファイルをロードするように要求したときだけです。

編集 2 (完全な読み込みコード):

 File folder = new File(saveDir);
        URL u = new URL("jar:" + folder.toURI().toURL() + "Zombies.jar!/");
        URLClassLoader ucl = URLClassLoader.newInstance(new URL[]{u});
        Class c = Class.forName("Visual.GameDisplay", true, ucl);
        Method m = c.getMethod("main", String[].class, String[].class, java.sql.Connection.class, Component.class);
        m.invoke(null, (Object) new String[]{textPack, font, currVersionStr,saveDir}, null, null, this);

バッファリングされた入力ストリームを取得して書き込み、それをバッファリングされた出力ストリームに書き込みます。

4

3 に答える 3

2

http://docs.oracle.com/javase/tutorial/deployment/applet/security.html

アプレットは、任意のファイル アクセスを許可されていません。

実際、ローカル ディスクからロードした場合は例外があります。これはどのようにロードされましたか?

于 2013-03-14T23:19:30.687 に答える
1

アプレットはユーザー ファイル システムへのアクセスを許可しません。データをサーバーに保存する必要があります。

于 2013-03-14T23:21:21.630 に答える
0

信頼されているコードと信頼されていないコードを混在させることは、本当に良い考えです。何でもロードできます。コードをロードするより安全な方法はjavax.jnlp、6u10 以降のアプレットで利用できるはずの 経由です。jar のロードが完了する前にクラスを参照しないように注意してください。これらのクラス名を使用することはできません (別のクラス ローダーを訴えることはありません)。

于 2013-03-15T17:11:02.770 に答える