我正在使用 JNI 从外部系统的 .jar 库中调用 Java 方法。我的问题是,当我编写使用该库的简单 Java 程序时一切正常,但是当我通过 JNI 执行相同的代码时,该库在从 String 解析整数时抛出 Null 异常。我确信我的 JNI 代码没有问题,因为我有一个更新版本的库,它具有相同的接口,可以通过 JNI 正常工作。但不幸的是,由于与外部系统的兼容性问题,我不得不使用旧版本。
我认为问题出在 jvm.dll 创建 VM 的方式上——我可能遗漏了一些在创建 VM 时应该传递给 jvm.dll 的参数。有谁知道问题可能出在哪里?
我不能发布我的代码,但我可以在示例中解释它: - 库版本 1 包含带有构造函数 Router(int i) 的类路由器 - 我没有此类的代码 - 库版本 2 包含相同的类构造函数 - 当我编写简单程序时
import java.lang.reflect.*;
public class Basic
{
public static void main(String[] args)
{
Router = new Router(10);
}
}
它适用于两个库。
当我通过 JNI 使用较新的库 2 运行相同的代码时,它也可以工作。但是当我通过 JNI 使用库 1 运行代码时,由于以下内部异常而崩溃
Error message: System.Exception: JAVA Exception: java.lang.NullPointerException
at com.coda.core.types.TypeNumber.parseNumber(TypeNumber.java:403)
at com.coda.core.types.TypeInteger.parse(TypeInteger.java:123)
at com.coda.core.types.TypeInteger.parse(TypeInteger.java:137)
at com.coda.core.Options.setOption(Options.java:138)
at com.coda.core.Options.set(Options.java:85)
at com.coda.core.configuration.ConfigurationLoader.getConfiguration(ConfigurationLoader.java:144)
at com.coda.xml.Configuration.init(Configuration.java:453)
at com.coda.xml.Configuration.init(Configuration.java:370)
at com.coda.xml.router.AppServer.<init>(AppServer.java:250)
at com.coda.xml.router.Router.<init>(Router.java:122)