检查是否已加载dll库? (JAVA)
在我编写的Java程序中,我对dll进行jni调用,并在启动时加载库,如下所示
static { System.loadLibrary("LdapAuthenticator2"); }
然后,我实现了另一个加载相同库的类,并且收到一个错误,说明该库已经加载了,有没有办法检查库是否已经在运行?
谢谢,
-Pete
检查我对这个问题的回答
如何获取已加载的JNI库列表?
该解决方案很有效,遗憾的是问题的海报似乎与非SUN兼容的JVM或限制性太强的SecurityManager存在问题。
链接到示例POC源代码。
List loaded JNI libraries java sourcecode
什么样的错误? 如果这是一个例外,你能抓住它吗?
另一种方法是使一个类完全负责加载库。 您可以加载类的静态初始化程序的库部分,然后加载类==加载库。
编辑: Runtime.loadLibrary()
( System.loadLibrary
调用)的javadoc甚至建议静态初始化方法:
如果要在类的实现中使用本机方法,则标准策略是将本机代码放入库文件(称为LibFile),然后放置静态初始化程序:
static { System.loadLibrary("LibFile"); }
在类声明中。 当加载并初始化类时,也将加载本机方法的必要本机代码实现。
javadocs还说:
如果使用相同的库名称多次调用此方法,则忽略第二次和后续调用。
这让我对你得到的错误更加好奇。