1

我目前正在开发一款游戏,并制作了一个 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);

通过仅获取缓冲输入流,然后将其写入缓冲输出流来写入。

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 回答