好的,现在我们来探究问题的根源。(您仍然可以使用
printStackTrace-这也应该已经打印的堆栈跟踪
cause。)。
未签名的小程序只能访问有限数量的系统属性-这些
jna
属性不属于这些属性。在未签名的applet中,无论如何您都无法加载本机库,因此无法使用JNA(或JNI)。
如果您在applet上签名(并告诉插件接受签名),则applet具有使用JNA的必要权利。但是,任何单个运行代码的权利实际上就是称为当前代码的所有方法的权利的交叉点。
从Javascript调用的Applet方法具有非常有限的权限(因为即使您的浏览器甚至具有这种概念,插件也无法真正检查Javascript代码是否具有必需的权限)。
您可以通过包装代码的一部分来解决此问题,该代码部分需要在applet的权限下运行
AccessController.doPrivileged(...)。但是首先
要确保它不会做任何危险的事情 (对于JNI / JNA来说很容易),即使是从恶意Javascript代码中调用也是如此。



