私は現在ゲームに取り組んでおり、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);
バッファリングされた入力ストリームを取得して書き込み、それをバッファリングされた出力ストリームに書き込みます。