代码之家  ›  专栏  ›  技术社区  ›  rohit roy

从java代码调用DLL中的本机函数。有时引发未捕获的运行时异常

  •  0
  • rohit roy  · 技术社区  · 10 年前

    有一个用DLL编写的函数,由我的java代码调用。该函数在java中声明为本机函数。假设函数有3个参数。当我在带有两个参数的java代码中使用该函数时,它工作得很好。但当我用三个参数调用本机函数时,它会给出以下错误。

    运行时异常:未捕获的运行时异常。

    本机方法被重写,这意味着可以使用任意数量的参数调用它。所有参数都是字符串类型。 因此,当使用两个参数调用该方法时,它总是有效的。但如果我们用3个参数调用。它在前2-3次工作,然后抛出运行时异常。

    所以我只想知道这个问题是与DLL中实现的函数有关,还是我的java代码中的问题。我在Thread中调用了本机函数,这个本机函数正在使用外部windows资源。因为它有时会起作用,我认为线程没有正常工作。 请提出建议。

    示例代码:

    本机函数声明的Java代码:

    系统LoadLibrary(“demo”)//demo是包含本机函数实现的.dll。 fn_dmeo(字符串1,字符串2); fn_demo(字符串1,字符串2,字符串3);//此函数打开记事本

    fn_demo的实现是用dll编写的。 所以我在Thread.run()中调用fn_demo(“”、“abc”、“xyz”) 有两个参数,第一个为空,它总是有效的。

    如果我这样做fn_demo(“pqr”、“abc”、“xyz”)。有时它会工作,有时它会抛出运行时异常。

    为什么?

    1 回复  |  直到 9 年前
        1
  •  0
  •   rohit roy    10 年前

    此问题与内存泄漏有关。dll代码中的一些变量没有正确赋值,它们具有垃圾值。因此代码间歇性故障。