Java在通过JNI调用时抛出Null异常,但在从Java程序调用时有效



我正在使用JNI从外部系统调用.jar库中的Java方法。我的问题是,当我编写使用该库的简单Java程序时,一切都很好,但当我通过JNI执行相同的代码时,该库在解析String中的Integer时抛出Null异常。我确信我的JNI代码没有问题,因为我有一个新版本的库,它具有相同的接口,可以通过JNI正常工作。但不幸的是,由于与外部系统的兼容性问题,我不得不使用旧版本。

我认为问题出在jvm.dll创建VM的方式上——我可能缺少一些在创建VM时应该传递给jvm.dll的参数。有人知道问题出在哪里吗?

我不能发布我的代码,但我可以通过示例进行解释:-库版本1包含类Router和构造函数Router(int i)-我没有这个类的代码-库版本2使用相同的构造函数替换相同的类-当我写简单程序时

import java.lang.reflect.*;
public class Basic
{
    public static void main(String[] args)
    {
        Router = new Router(10); 
    }
}

它适用于这两个库。

当我通过JNI在较新的库2中运行相同的代码时,它也能工作。但是当我使用库1通过JNI运行代码时,由于以下内部异常,它崩溃了

    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)

我已经解决了这个问题。我在JVM的参数上犯了一个错误。旧的图书馆需要另一个我不知道的罐子图书馆。所以我已经把库添加到类路径中,它运行得很好。真是愚蠢的例外,什么也没说的信息让我以错误的方式寻找问题。

感谢大家的评论

最新更新