我写了一个笨重的小突破克隆&我正在写磁盘以保存游戏和高分。
我是否有一种简单的方法可以检查我的程序是作为applet运行还是作为应用程序运行?
...例如
if(!anApplet){
//Include disk i/o features
}
我尝试在'main'类中设置一个布尔变量,使用init()将其设置为false,并在main方法中设置为true,但到目前为止还没有运气。无论如何都会继续努力,但提前感谢任何建议!
答案 0 :(得分:3)
使用AccessController。您可以将所有呼叫包裹在AccessController.doPrivileged
块中。
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
// privileged code goes here, for example, read and writing files.
...
return null; // nothing to return
}
});
如有必要,您还可以在启动时建立应用程序具有的权限,并在以后使用它们:
Boolean flag = AccessController.doPrivileged(new PrivilegedAction() {
public Boolean run() {
boolean flag = false;
// privileged code goes here, for example, read and writing files. If it succeeds, set flag to true.
...
return flag; // return true, if the privileged action succeeded
}
});
我建议使用第一种方法。如果您确实使用了第二个,那么将标志变量设为final;因此,您需要在存储此标志的类的构造函数中执行任何“特权测试”。
<强>附录强>
如果遇到问题,代码片段将继续抛出AccessControlException
个。如果你想继续处理,而不是阻碍用户,那么你必须抓住它们,同时将标志设置为false。存在AccessController.doPrivilege
块以检查当前堆栈帧是否存在权限。
附录#2
建议不要使用AccessController.checkPermission
,除非您可以保证存在安全管理器和相应的策略文件。在没有安全管理器的情况下,此方法将始终为权限检查抛出异常,当应用程序未作为小程序运行时,这将是不合需要的。