EXCEPTION_ACCESS_VIOLATION (0xc0000005) 来自 JNI 的 JVM?

2024-01-11

我在 vc++ 中用 JNI 编写了一些本机方法,以便从 java 访问。我的三种方法中有两种工作得很好,没有任何问题。然而,当我在运行时调用我的最后一个方法时,它会导致以下错误消息:

# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x61e06550, pid=3408, tid=4796
#
# JRE version: 7.0-b147
# Java VM: Java HotSpot(TM) Client VM (21.0-b17 mixed mode, sharing windows-x86 )
# Problematic frame:
# V  [jvm.dll+0xa6550]
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows

这是我的本机方法的代码(在 vc++ 中):

JNIEXPORT jcharArray JNICALL Java_jniusb_Main_receiveData (JNIEnv *env, jclass, jchar dataIndex)
{
    DWORD BytesWritten = 0;
    DWORD BytesRead = 0;
    unsigned char OutputPacketBuffer[65];   
    unsigned char InputPacketBuffer[65];    

    static jcharArray ReturnPacketBuffer;
    jchar temp[65];

    //send 'receive data' command to the firmware (OutputPacketBuffer[1])
    WriteFile(WriteHandle, &OutputPacketBuffer, 65, &BytesWritten, 0);
        //retrieve data from firmware
    ReadFile(ReadHandle, &InputPacketBuffer, 65, &BytesRead, 0);        

        for(int i=0;i<64;i++) 
    {
        temp[i] = jchar(InputPacketBuffer[i+1]);
    }

    (*env).SetCharArrayRegion(ReturnPacketBuffer, 0, 64, temp);
    return ReturnPacketBuffer;
}

我的 Java 代码如下所示(当然是缩写的):

public static native char[] receiveData(char dataIndex);

public static void main(String[] args) {
    char vid = 0x4d8;
    char pid = 0x3f;

    //check if read/write handles were retrieved 
    if(connectHid(vid, pid) == true)
    {
        System.out.println("connected!!!");
    }
    else
    {
        System.out.println("not connected...");
    }


    char[] test = new char[64];
    char[] receivetest = new char[64];

    char length = 0x03;
    char dataIndex = 0x81;

    test[0] = 0x80;
    test[1] = 0x80;
    sendData(test, length);
    receivetest = receiveData(dataIndex);

正如我之前所说,其他方法(即 connect 和 senddata)工作正常,但我从 receiveData 方法中收到错误。经过一些调试后,我发现当我注释掉该行时,错误消失了:

(*env).SetCharArrayRegion(ReturnPacketBuffer, 0, 64, temp);

在我的本机代码中(当然在这种情况下数据永远不会返回......)。我在这里做错了什么?


你是不是缺少类似的东西ReturnPacketBuffer = (*env)->NewCharArray(env, 64);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EXCEPTION_ACCESS_VIOLATION (0xc0000005) 来自 JNI 的 JVM? 的相关文章

  • Java Swing:从 JOptionPane 获取文本值

    我想创建一个用于 POS 系统的新窗口 用户输入的是客户拥有的金额 并且窗口必须显示兑换金额 我是新来的JOptionPane功能 我一直在使用JAVAFX并且它是不同的 这是我的代码 public static void main Str
  • 如何默认将 Maven 插件附加到阶段?

    我有一个 Maven 插件应该在编译阶段运行 所以在项目中consumes我的插件 我必须做这样的事情
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List

随机推荐

  • 如何在 TypeORM 中模拟 EntityManager?

    我有以下代码从我的 NestJS 服务中模拟实体管理器 它在某种程度上有效 但问题在于指定什么findOne应该返回不同的实体 provide getEntityManagerToken useFactory connection Conn
  • R:根据数据框列表中的数据框名称设置列名称

    我有一个很大的数据框列表 如下所示 gt head lst Set1 ID Value 1 A 1 2 B 1 3 C 1 Set2 ID Value 1 A 1 2 D 1 3 E 1 Set3 ID Value 1 B 1 2 C 1
  • 自定义 sp_who 而不授予查看服务器状态

    我需要一个存储过程 可以将其提供给一组用户 使他们能够查看所有正在运行的进程 例如sp who 但我不希望这些用户拥有VIEW SERVER STATE权限 因为这会暴露太多元数据 我还需要允许用户终止进程 这是专门用于该组的开发服务器 我
  • Tinkerpop Gremlin 深度优先搜索顺序

    我有一个非常简单的示例图 我试图对其进行深度优先查询 假设图的边看起来像这样 A gt B A gt C B gt D B gt E C gt F C gt G 从 A 开始的深度优先搜索应该返回 A B D E C F G 但如果我能得到
  • 阻止 CTRL-Click 影响父数据网格

    我有一个 WPF DataGrid 它在 RowDetailsTemplate 中声明了另一个数据网格
  • 使用PIL在App Engine上绘制图像

    我已阅读主题 App Engine PIL 和叠加文本 https stackoverflow com questions 12695480 app engine pil and overlaying text 下面的代码将显示损坏的图像
  • 使用 TFLiteConverter 将 Keras 模型转换为量化的 tflite 版本会导致 NOTYPE 错误

    当转换和执行 keras 模型的 8 位量化时 我遇到了一个奇怪的错误 而图像数据集不会发生这种错误 import tensorflow python keras backend as K import tensorflow as tf f
  • 在向量上查找另一个特定数字之前的数字

    所以我想知道matlab中一个事件何时发生在另一个事件之前 我所说的事件是指数字 例如 我有一个向量 比方说 x 0 3 0 3 0 1 0 2 0 5 0 1 0 3 0 1 0 5 0 1 0 4 0 5 我想知道 0 1 发生在 0
  • 简化嵌套 Maybe 模式匹配

    我的代码中有以下构造 f Maybe A gt X f a case a of Nothing gt x Just b gt case b of Nothing gt y Just c gt case c of Nothing gt z J
  • SpringMVC Ajax 验证

    我有一个 Spring Mvc 3 表单 可以 POST 到控制器 在控制器中我调用来执行 DML 语句 我还有一个单独的验证类 它实现 Validator 并在我的控制器中调用 我在那里进行简单和复杂的验证 例如检查用户名是否存在并返回错
  • 如何在AFNetworking 2.0中获取下载进度?

    我正在使用 AFURLSessionManager 创建一个新的下载任务 AFURLSessionManager manager NSProgress p nil NSURLSessionDownloadTask downloadTask
  • 让 vim 分割窗口处于插入模式

    我想在 vim 分割窗口中查看 bash 命令的输出 split 为此 我安装了 Conque Shell 它在分割窗口中显示 bash ConqueTermSplit bash 然后我可以运行 shell 命令并在插入模式下观察输出 但是
  • 3 维空间中点与线之间的最短距离

    我试图使用 numpy 或 python 中的任何东西找到从点 x0 y0 z0 到由 x1 y1 z1 和 x2 y2 z2 连接的线的最小距离 不幸的是 我在网上能找到的所有内容都与二维空间有关 而且我对 python 还很陌生 任何帮
  • 在 Java 中如何确定另一个进程或可执行文件是 32 位还是 64 位

    Java 是否有任何可以调用的 API 可以知道进程或 exe 文件是 32 位还是 64 位 不是运行代码的 JVM 没有标准的 Java API 来确定是否external进程是 32 位或 64 位 如果您想执行此操作 则需要使用本机
  • win32应用程序不是那么面向对象,为什么有这么多指针?

    对于你们中的一些人来说 这可能是一个愚蠢的问题 也许我问这个问题是错误的 因为我是 C 新手 但我注意到 在许多 Win32 应用程序中工作时 您会使用大量指针资源 为什么必须始终获取对象指针 为什么不启动该类的新实例 说到这一点 我注意到
  • 将 pandas 时区感知的 DateTimeIndex 转换为天真的时间戳,但在特定时区

    您可以使用该功能tz localize使 Timestamp 或 DateTimeIndex 时区感知 但如何做相反的事情 如何将时区感知时间戳转换为天真的时间戳 同时保留其时区 一个例子 In 82 t pd date range sta
  • 如何使用 eclipse adt 将新库添加到 android 依赖项?

    我正在尝试使用 eclipse adt 将外部库添加到 android 依赖项 我那里有几个库 例如拉动刷新等 但每次我添加一个新的库 jar 文件时 它都会显示在 android 依赖项库文件夹之外 我如何使它与其他库耦合作为 andro
  • 使用 hciattach 通过 uart 进行蓝牙?

    我在用QN9021SoC工作在controller mode BLE 蓝牙核心规范 v4 0 它支持一些标准HCI命令以及一些供应商特定的命令 我正在尝试将其附加到我的ubuntu laptop 我使用的命令是hciattach hciat
  • 通过双击文件将参数传递给 JavaFx 应用程序

    我创建了一个 JavaFX 应用程序 部署了 app 文件 它工作正常 然后 我将操作系统设置为使用我的应用程序打开具有特定扩展名的所有文件 我的问题是 当我双击文件时 我的应用程序打开 但我不知道打开它的文件是哪个 我尝试使用该函数检查应
  • EXCEPTION_ACCESS_VIOLATION (0xc0000005) 来自 JNI 的 JVM?

    我在 vc 中用 JNI 编写了一些本机方法 以便从 java 访问 我的三种方法中有两种工作得很好 没有任何问题 然而 当我在运行时调用我的最后一个方法时 它会导致以下错误消息 A fatal error has been detecte