当前位置: 首页 > 面试题库 >

小程序。java.lang.reflect.InvocationTargetException

汝天宇
2023-03-14
问题内容

我有使用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(),因为applet
try / catch无法捕获错误(我不明白为什么)。但是javascript try / catch捕获此错误。如果移动Pointer p = new Memory(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.PropertyPermission
jna.boot.library.path)


问题答案:

好的,现在我们来探究问题的根源。(您仍然可以使用printStackTrace-这也应该已经打印的堆栈跟踪cause。)。

  1. 未签名的小程序只能访问有限数量的系统属性-这些jna属性不属于这些属性。

  2. 在未签名的applet中,无论如何您都无法加载本机库,因此无法使用JNA(或JNI)。

  3. 如果您在applet上签名(并告诉插件接受签名),则applet具有使用JNA的必要权利。但是,任何单个运行代码的权利实际上就是称为当前代码的所有方法的权利的交叉点。

从JavaScript调用的Applet方法具有非常有限的权限(因为即使您的浏览器甚至具有这种概念,插件也无法真正检查JavaScript代码是否具有必需的权限)。

您可以通过包装代码的一部分来解决此问题,该代码部分需要在applet的权限下运行AccessController.doPrivileged(...)。但是首先
要确保它不会做任何危险的事情 (对于JNI / JNA来说很容易),即使是从恶意JavaScript代码中调用也是如此。



 类似资料:
  • 小程序跳转小程序 产品简介 开发者可以通过以下接口帮助用户在小程序之间互相跳转。 使用场景 当开发者拥有多个小程序时,可以通过小程序间互相跳转,完善小程序生态。 开放标准 对所有入驻小程序的企业开放。 打开指定的小程序 开发者可以使用jd.navigateToMiniProgram(OBJECT),打开指定的小程序,帮助用户在小程序之间跳转。 OBJECT 参数说明: 参数名 类型 必填 说明 a

  • 商城营销渠道设置 打开后台-小程序,可以对微信公众号和微信小程序所展示内容进行设置 微信小程序 微信公众号

  • 网络 request 发起网络请求 手百链接 uploadFile 上传文件 手百链接 downloadFile 下载文件 手百链接 WebSocket connectSocket 创建 WebSocket 连接 手百链接 onSocketOpen 监听 WebSocket 打开 手百链接 onSocketError 下载文件 手百链接 onSocketError 监听 WebSocket 错误

  • 微信小程序 SDK 支付宝小程序 SDK 百度小程序 SDK 微信小游戏 SDK 快应用 SDK

  • 学习如何在Java编程中使用Applet。 以下是最常用的示例 如何创建一个基本的Applet? 如何使用Applet创建横幅? 如何使用Applet显示时钟? 如何使用Applet创建不同的形状? 如何使用Applet填充形状中的颜色? 如何使用Applet转到链接? 如何在Applet中创建事件监听器? 如何使用Applet显示图像? 如何使用Applet在新窗口中打开链接? 如何使用Appl

  • 获取小程序码 接口A: 适用于需要的码数量较少的业务场景 API: $app->app_code->get(string $path, array $optional = []); 其中 $optional 为以下可选参数: width Int - 默认 430 二维码的宽度 auto_color 默认 false 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调 line_colo