如何判断我的程序是作为Applet运行还是作为Java应用程序运行

Bre*_*ett 5 java applet exception

我写了一个笨重的小突破克隆,我正在写入磁盘以保存游戏和高分.

有一种简单的方法让我检查我的程序是作为applet运行还是作为应用程序运行?

例如...

if(!anApplet){
//Include disk i/o features
}
Run Code Online (Sandbox Code Playgroud)

我已尝试在'main'类中设置一个布尔变量,使用init()将其设置为false,并在main方法中设置为true,但到目前为止还没有运气.将继续尝试,但提前感谢任何建议!

Vin*_*lds 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
        }
});
Run Code Online (Sandbox Code Playgroud)

如有必要,您还可以在启动时建立应用程序拥有的权限,并在以后使用它们:

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
        }
});
Run Code Online (Sandbox Code Playgroud)

我建议使用第一种方法。如果您确实使用第二个,则使标志变量本质上为最终变量;因此,您需要在存储此标志的类的构造函数中执行任何“权限测试”。

附录

AccessControlException如果遇到代码片段,它们将继续抛出s。如果您想继续处理而不妨碍用户,那么您必须捕获它们,同时将标志设置为 false。该AccessController.doPrivilege块的存在是为了检查当前堆栈帧是否存在权限。

附录#2

AccessController.checkPermission不建议使用,除非您可以保证安全管理器和适当的策略文件的存在。在没有安全管理器的情况下,此方法将始终抛出权限检查异常,当应用程序不作为小程序运行时,这是不希望的。