我想知道是否有一种方法可以让Java类确定它是否在applet中使用?
也就是说,我有一个可供第三方应用程序和小程序使用的库( .jar文件)。它确实可以在applet中工作,但我想做一些不同的事情,这取决于库是否在applet类中使用,显示applet适用的错误,避免本地文件I/O等。
比方说,如果Applet.getAppletContext()是静态的,这样即使我没有applet实例,我也可以调用它(并获取NULL或not NULL),那就好了。
发布于 2010-03-19 03:12:20
检测它是否作为applet运行的另一种方法是在发生安全异常时使用回退方法。当在另一个环境中使用时,这将是有利的,例如具有安全上下文的servlet容器。
示例:
try {
File file = new File("c:\\test.txt");
System.out.println("Exists? " + file.exists());
} catch (java.security.AccessControlException e) {
// fallback
}发布于 2010-03-19 00:52:32
根据Java Security Overview Whitepaper (第14页第2段)
在安装了SecurityManager的情况下,Java和
™Web Start应用程序会自动运行。但是,默认情况下,通过java命令执行的本地应用程序不会在安装了SecurityManager的情况下运行。
这意味着对System.getSecurityManager()的调用将在小程序中返回非null,如果不在小程序中,则返回null。例外也是可能的,例如,可以在运行程序时从命令行指定安全管理器。
boolean insideApplet()
{
return null != System.getSecurityManager();
}发布于 2010-03-19 01:07:47
也许最安全的方法是让用户告诉你它是否在applet中(只需将"boolean“变量添加到适当的构造函数和/或方法中。
当然,你想要一些更自动的东西来避免这种情况,但是,据我所知,没有确定的方法来知道一个程序是如何在VM上运行的。我可能会从查看安全管理器开始,就像torak在他/她的答案中建议的那样,但我不会只查找null,而是检查它的类型。我环顾了一下,但没有发现applet使用的安全管理器类是否有任何类型的“标准”名称。
最后,最安全的方法是让您的库的用户做出决定,因为他们将拥有所需的信息。
https://stackoverflow.com/questions/2471607
复制相似问题