【发布时间】:2017-07-16 15:11:00
【问题描述】:
我正在开发一个与硬件设备交互的应用程序。使用硬件官方应用程序提供的 dll 文件,我初始化设备并注册一些函数作为回调,以便在某些用户交互时调用。在这个回调函数中,我想调用一个Java函数来传输数据。但是,整个应用程序在回调中的这个调用中退出,没有任何错误日志:
jclass cls = env->FindClass("java/lang/String");
如果在 Java 直接调用的函数中执行相同的调用,则该调用有效。 这种行为的原因是什么?从设备驱动程序调用中调用 JNI 有何不同?任何帮助表示赞赏。
编辑:我尝试了 Vernee 的建议并尝试将驱动程序线程附加到 JVM,但是行为没有改变。此外,我丢失了printf 输出,不幸的是,这是我调试 JNI 端的唯一选择。它们在附加操作之前工作,但之后停止工作。
【问题讨论】:
-
看这里:stackoverflow.com/a/12900986/3699139
JNIEnv*仅对调用 native 的线程有效。 -
@JornVernee 你还有其他建议吗?
-
抱歉,这是我唯一的猜测。
标签: java windows java-native-interface