检查是否已加载dll库? (JAVA)

时间:2009-07-16 18:22:54

标签: java java-native-interface

在我编写的Java程序中,我对dll进行jni调用,并在启动时加载库,如下所示

static
{
   System.loadLibrary("LdapAuthenticator2");
}

然后我实现了另一个加载相同库的类,并且收到一个错误,说明该库已经加载了,有没有办法检查库是否已经在运行?

谢谢,
-Pete

2 个答案:

答案 0 :(得分:8)

检查我对这个问题的回答

How do I get a list of JNI libraries which are loaded?

解决方案有效,不幸的是,问题的海报似乎与非SUN兼容的JVM或限制性太强的SecurityManager有问题。

链接到示例POC源代码。

List loaded JNI libraries java sourcecode

答案 1 :(得分:0)

出现什么样的错误?如果这是一个例外,你能抓住它吗?

另一种方法是使一个类负责加载库。你可以加载类的静态初始化器的库部分,然后加载class ==加载库。

编辑:javadocs for Runtime.loadLibrary()System.loadLibrary次调用)甚至建议采用静态初始化方法:

  

如果要在类的实现中使用本机方法,a   标准策略是把原生   库文件中的代码(称之为   LibFile)然后放一个静态的   初始化:

     static { System.loadLibrary("LibFile"); }
     

在类声明中。当类加载并初始化时,   必要的本机代码   本机方法的实现   然后也会加载。

javadocs还说:

  

如果使用相同的库名称多次调用此方法,则忽略第二次和后续调用。

让我对你得到的错误更加好奇。