我制作了一个将高分保存在文件中的 java 游戏,但我无法为程序提供足够的权限以使其在 appletviewer 下工作。
appletviewer 似乎忽略了我的策略文件。
我已经Game.java
编译成Game.class
,并Game.html
加载和运行小程序。在与这些相同的目录中,我有一个以policy
以下内容命名的策略文件(用 制作policytool
)。
grant codeBase "file:///mypath/Game.html" {
permission java.security.AllPermission;
};
然后appletviewer
据说可以让您指定这样的策略文件:
appletviewer -J-Djava.security.policy=policy /mypath/Game.html
但是当我以这种方式启动游戏时,它只能读取高分文件,不能写入:
Exception in thread "Thread-5" java.security.AccessControlException:
access denied (java.io.FilePermission highscore write)
此外,如果我在 Finder 中双击仅包含上述单行 appletviewer 命令的 shell 脚本,则它甚至没有读取权限:
Exception in thread "Thread-5" java.security.AccessControlException:
access denied (java.io.FilePermission highscore read)
一个令人不安的迹象是,如果我给出一个不存在的文件的名称而不是我的策略文件的名称,那么我会得到相同的行为,而不会出现其他警告或错误:
appletviewer -J-Djava.security.policy=notafile /mypath/Game.html
游戏本身(除了高分代码)在每种情况下都能正常工作,如果我在 Eclipse 下运行整个游戏,即使 Eclipse 也使用 appletviewer 运行它,高分代码也能正常工作。Eclipse 还制作了一个与上述类似的策略文件,我也从命令行尝试过,但它仍然无法从命令行运行。
似乎appletviewer
没有查看策略文件,尽管我使用的命令与http://docs.oracle.com/javase/tutorial/security/tour1/step3.html等各种教程中显示的完全一致。
为什么 appletviewer 会忽略我的策略文件?