【发布时间】:2013-03-14 23:13:53
【问题描述】:
我目前正在开发一款游戏,并制作了一个 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(未知 来源)在 java.security.AccessController.checkPermission(Unknown 来源)在 java.lang.SecurityManager.checkPermission(未知来源) 在 java.lang.SecurityManager.checkRead(Unknown Source) 在 java.io.File.exists(Unknown Source) at 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);
通过获取缓冲输入流然后将其写入缓冲输出流来写入。
【问题讨论】:
标签: java security digital-signature jar-signing