我目前正在开发一款游戏,并制作了一个 JFrame 加载器,它可以从 user.home 目录加载游戏,但最近决定我也想在 web 小程序中使用它。
当我运行 JFrame 加载程序时,它成功加载游戏,检查文件并打开。(游戏和 JFrame 都已签名)我可以使用以下方法从 Applet 加载和调用该方法:
m.invoke(null, (Object) new String[]{textPack, font, currVersionStr,saveDir}, null, null, this);
但是当Applet尝试加载它时会发生以下错误,它可以正常加载游戏,但是当它尝试使用代码加载保存的选项时:
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 core.GameEngine 运行严重:null java.security.AccessControlException:访问被拒绝(“java.io.FilePermission”“C:\Users\Jake.Zombies\Options.keys”“读取” ) 在 java.security.AccessControlContext.checkPermission(Unknown Source) 在 java.security.AccessController.checkPermission(Unknown Source) 在 java.lang.SecurityManager.checkPermission(Unknown Source) 在 java.lang.SecurityManager.checkRead(Unknown Source) 在java.io.File.exists(Unknown Source) 在 core.Configuration.loadKeys(Configuration.java:123) 在 core.Configuration.onStartup(Configuration.java:105) 在 core.GameEngine.run(GameEngine.java:76)
如果行 if(!f.exists()) 是 Configuration.java:123
我的问题是它在 JFrame 加载器(已签名)中加载良好,但在 Applet(已签名)中加载良好
非常感谢任何帮助,谢谢。
编辑:小程序加载程序检查文件,并且可以下载最新的文件。只有当我询问我加载的游戏时,才能加载它遇到问题的文件。
编辑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);
通过仅获取缓冲输入流,然后将其写入缓冲输出流来写入。