【问题标题】:Check if a dll library is already loaded? (Java)检查是否已加载 dll 库? (爪哇)
【发布时间】:2009-07-16 18:22:53
【问题描述】:

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

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

然后我实现了另一个加载同一个库的类,并收到一个错误说该库已加载,有什么方法可以检查该库是否已经在运行?

谢谢,
-皮特

【问题讨论】:

    标签: java java-native-interface


    【解决方案1】:

    查看我对这个问题的回答

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

    该解决方案有效,不幸的是,问题的发布者似乎存在与非 SUN 兼容的 JVM 或过于严格的 SecurityManager 的问题。

    示例 POC 源代码的链接。

    List loaded JNI libraries java sourcecode

    【讨论】:

      【解决方案2】:

      什么样的错误?如果是异常,你能抓住它吗?

      另一种方法是让一个类负责加载库。您可以将加载库作为类的静态初始化程序的一部分,然后加载 class== 加载库。

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

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

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

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

      javadocs 还说:

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

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

      【讨论】:

      猜你喜欢
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多