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

时间:2016-01-18 10:01:15

标签: java dll java-native-interface native-code

在DLL中编写的函数由我的java代码调用。该函数在java中声明为native。说该函数有3个参数。当我在带有两个参数的java代码中使用该函数时,它工作正常。但是当我用三个参数调用本机函数时,它会产生以下错误。

  

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

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

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

示例代码:

Native函数声明的Java代码:

System.LoadLibrary(" demo")// demo是.dll,其中包含本机函数实现。 fn_dmeo(string 1,string 2); fn_demo(string 1,string 2,string 3); //此功能打开记事本

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

如果我这样做fn_demo(" pqr"," abc"," xyz")。有时它会在某些时候抛出运行时异常。

为什么呢?

1 个答案:

答案 0 :(得分:0)

此问题与Memory Leak有关。 dll代码中的某些变量未正确赋值,并且它们具有Garbage值。由于代码间歇性地失败了。