首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测Applet上下文(我是否在applet中?)

检测Applet上下文(我是否在applet中?)
EN

Stack Overflow用户
提问于 2010-03-19 00:32:44
回答 3查看 1.5K关注 0票数 1

我想知道是否有一种方法可以让Java类确定它是否在applet中使用?

也就是说,我有一个可供第三方应用程序和小程序使用的库( .jar文件)。它确实可以在applet中工作,但我想做一些不同的事情,这取决于库是否在applet类中使用,显示applet适用的错误,避免本地文件I/O等。

比方说,如果Applet.getAppletContext()是静态的,这样即使我没有applet实例,我也可以调用它(并获取NULL或not NULL),那就好了。

EN

回答 3

Stack Overflow用户

发布于 2010-03-19 03:12:20

检测它是否作为applet运行的另一种方法是在发生安全异常时使用回退方法。当在另一个环境中使用时,这将是有利的,例如具有安全上下文的servlet容器。

示例:

代码语言:javascript
复制
try {
    File file = new File("c:\\test.txt");
    System.out.println("Exists? " + file.exists());
} catch (java.security.AccessControlException e) {
    // fallback
}
票数 2
EN

Stack Overflow用户

发布于 2010-03-19 00:52:32

根据Java Security Overview Whitepaper (第14页第2段)

在安装了SecurityManager的情况下,Java和

™Web Start应用程序会自动运行。但是,默认情况下,通过java命令执行的本地应用程序不会在安装了SecurityManager的情况下运行。

这意味着对System.getSecurityManager()的调用将在小程序中返回非null,如果不在小程序中,则返回null。例外也是可能的,例如,可以在运行程序时从命令行指定安全管理器。

代码语言:javascript
复制
boolean insideApplet()
{
  return null != System.getSecurityManager();
}
票数 1
EN

Stack Overflow用户

发布于 2010-03-19 01:07:47

也许最安全的方法是让用户告诉你它是否在applet中(只需将"boolean“变量添加到适当的构造函数和/或方法中。

当然,你想要一些更自动的东西来避免这种情况,但是,据我所知,没有确定的方法来知道一个程序是如何在VM上运行的。我可能会从查看安全管理器开始,就像torak在他/她的答案中建议的那样,但我不会只查找null,而是检查它的类型。我环顾了一下,但没有发现applet使用的安全管理器类是否有任何类型的“标准”名称。

最后,最安全的方法是让您的库的用户做出决定,因为他们将拥有所需的信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2471607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档