小程序。java.lang.reflect.InvocationTargetException
导读:如何解决小程序。java.lang.reflect.InvocationTargetException?好的,现在我们来探究问题的根源。(您仍然可以使用printstacktrace-这也应该已经打印的堆栈跟踪cause。)。未签名的小程序只能访问有限数量的系统属性-这些jna属性不属于这些属性。在...
好的,现在我们来探究问题的根源。(您仍然可以使用printstacktrace-这也应该已经打印的堆栈跟踪cause。)。
未签名的小程序只能访问有限数量的系统属性-这些jna属性不属于这些属性。
在未签名的applet中,无论如何您都无法加载本机库,因此无法使用JNA(或JNI)。
如果您在applet上签名(并告诉插件接受签名),则applet具有使用JNA的必要权利。但是,任何单个运行代码的权利实际上就是称为当前代码的所有方法的权利的交叉点。
从JavaScript调用的Applet方法具有非常有限的权限(因为即使您的浏览器甚至具有这种概念,插件也无法真正检查JavaScript代码是否具有必需的权限)。
您可以通过包装代码的一部分来解决此问题,该代码部分需要在applet的权限下运行AccessController.doPrivileged(...)。但是首先 (对于JNI / JNA来说很容易),即使是从恶意JavaScript代码中调用也是如此。
解决方法我有使用jna指针类的小程序。小程序代码为:
import com.sun.jna.*;public class Applet1 extends Applet{ public void test() {try { Pointer p = new Memory(73);} catch (Exception e) {e.printStackTrace();} }}
在html代码中,我以这种方式声明了applet:
<applet codebase=/pki/ code=Applet1.class archive=/pki/jna-3.2.3.jar id=Applet1 width=100 height=100 ></applet>
当我通过JavaScript调用document.getElementById(“Applet1”)。test()时,会出现java.lang.reflect.InvocationTargetException。我无法在Java类端调用e.getCause(),因为applettry / catch无法捕获错误(我不明白为什么)。但是javascript try / catch捕获此错误。如果移动Pointer p = newMemory(73);线就可以了。问题是这条线。请帮助解决问题。
编辑:如果替换此块:
try { Pointer p = new Memory(73);} catch (Exception e) { e.printStackTrace();}
至
try { Pointer p = new Memory(73);} catch (Throwable e) { System.out.println(e.getCause());}
我收到了java.security.AccessControlException:访问被拒绝(已读取java.util.PropertyPermissionjna.boot.library.path)
相关文章:
1. android - Rxjava 的 Repeat 操作符2. 从Spring MVC XML文件移至javaconfig我的数据库XML文件真的让我迷茫了3. 尝试在Spring WebFlow Project的服务级别上运行junit测试假设$ AssumptionViolatedException4. Safari的html5 localStorage错误:“ QUOTA_EXCEEDED_ERR:DOM异常22:试图向存储中添加超出配额的内容”5. 拒绝执行JavaScript脚本在请求中找到脚本的源代码6. css3 - 使用自定义属性来写 CSS 选择器是否更优雅?7. 关于Java Web会话处理如何工作的困惑使用servlet API和HttpSession对象使Cookies和标头的差异变得神秘8. JavaScript排序功能按第一,然后第二9. javascript - 请问如何在组件模板里使用vue实例里的变量数据?10. 在JavaScript中链接.bind()调用出乎意料的结果?