java – 当前运行的类或JAR文件的位置
我有一个
Lotus Notes数据库,正在执行与远程Web服务的一些交互.我编写了一个自定义Java类来执行交互.
根据用户的设置,类方法可以从三个位置之一执行: >通过Lotus Notes Java代理程序调用的Java脚本库中 在我的类中,我只想返回当前类正在执行的位置.因此,如果从选项2或选项3执行,则返回JAR文件路径.如果从选项1执行,然后返回我可以处理的其他东西. 我已经尝试了以下内容. getProtectionDomain()方法 getClass().getProtectionDomain().getCodeSource().getLocation() 其结果如下: java.security.AccessControlException: Access denied (java.lang.RuntimePermission getProtectionDomain) 没有任何选项可以更改任何运行此安全设置的客户端的安全设置. Class.getResource方法 String myName = "/" + getClass().getName().replace('.','/') + ".class"; URL myResourceURL = getClass().getResource(myName); 结果:myResourceURL是ALWAYS null. ClassLoader.getResource方法 String myName2 = getClass().getName().replace('.','/') + ".class"; ClassLoader myCL = getClass().getClassLoader(); URL myResourceURL2 = myCL.getResource(myName); 结果:myResourceURL2是ALWAYS null. a)我上面哪里出错了? 和 b)如何使用不同的方法获取当前正在执行的类的位置? 解决方法
我已经设法通过将我的代码包装在“AccessController.doPrivileged”块中,从而克服了这一点,即:
final String[] myLocationViaProtectionDomain = {null}; AccessController.doPrivileged(new PrivilegedAction(){ public Object run(){ myLocationViaProtectionDomain[0] = getClass().getProtectionDomain().getCodeSource().getLocation().toString(); debug("myLocationViaProtectionDomain: " + myLocationViaProtectionDomain[0]); return null; } }); 有趣的是,当JAR文件位于客户端的JVM目录(即我的原始帖子中的第2点和第3点)时,这种方法与我想要的一样正常.但是,当从Java脚本库中执行代码时运行相同的代码时,会抛出以下异常: java.security.AccessControlException: Access denied (java.lang.RuntimePermission getProtectionDomain) 这是很好的,因为至少在1和(2和3)之间有区别,我可以正确处理. 这个解决方案是由lekkimworld.com的优秀Mikkel(Twitter:@lekkim)向我指出的,所以非常感谢他出面. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |