1

我正在使用 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)
4

1 回答 1

0

我已经解决了这个问题。我在 JVM 的参数上确实犯了错误。较旧的库需要另一个我不知道的 jar 库。因此,我已将库添加到类路径中,并且知道它可以正常工作。真的很愚蠢的例外,没有任何消息让我以错误的方式寻找问题。

谢谢大家的意见

于 2013-02-10T12:53:47.140 回答