[英]How to tell if my program is running as an Applet, or as an Java Application
我写了一个笨重的小突破克隆,我正在写入磁盘以保存游戏和高分。
有没有一种简单的方法可以检查我的程序是作为小程序运行还是作为应用程序运行?
例如...
if(!anApplet){
//Include disk i/o features
}
我尝试在“main”class 中设置 boolean 变量,使用 init() 将其设置为 false,在 main 方法中设置为 true,但到目前为止没有运气。 无论如何都会继续尝试,但提前感谢您的任何建议!
使用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
}
});
我建议使用第一种方法。 如果您确实使用第二个,则将标志变量设为最终性质; 因此,您需要在存储此标志的 class 的构造函数中执行任何“特权测试”。
附录
如果遇到代码片段,它们将继续抛出AccessControlException
。 如果您想继续处理而不妨碍用户,那么您必须在将标志设置为 false 的同时捕获它们。 存在AccessController.doPrivilege
块以检查当前堆栈帧是否存在权限。
附录#2
不建议使用AccessController.checkPermission
,除非您可以保证存在安全管理器和适当的策略文件。 在没有安全管理器的情况下,此方法总是会抛出一个异常进行权限检查,这在应用程序不作为小程序运行时是不可取的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.