Java运行时loadLibrary()方法



描述

Java Runtime loadLibrary(String filename) 方法加载具有指定库名称的动态库。包含本地代码的文件从本地文件系统中加载,该系统通常用于获取库文件。此过程的细节取决于实现。库名称与特定文件名之间的映射以系统特定的方式完成。

首先,如果存在安全管理器,则其checkLink方法将使用libname作为参数调用。这可能会导致安全异常。System.loadLibrary(String)方法是调用此方法的常规且便捷的方法。如果要在类的实现中使用本地方法,则标准策略是将本地代码放在库文件(称为LibFile)中,然后放置一个静态初始化器:

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

在类声明中。当加载和初始化类时,本地方法的必要本地代码实现也将被加载。如果使用相同的库名称多次调用此方法,则第二次及后续调用将被忽略。

声明

以下是java.lang.Runtime.loadLibrary()方法的声明

public void loadLibrary(String libname)

参数

libname − 库的名称。

返回值

此方法不返回值。

异常

  • SecurityException − 如果存在安全管理器并且其checkLink方法不允许加载指定的动态库

  • UnsatisfiedLinkError − 如果库不存在

  • NullPointerException − 如果libname为null

示例:加载JDK库路径中存在的JAAS DLL

以下示例演示了Java Runtime load()方法的使用。在这个程序中,我们使用load()方法传递jaas.dll的相对路径来加载它,并打印相应的讯息。

package com.tutorialspoint;

public class RuntimeDemo {

   public static void main(String[] args) {

      // print when the program starts
      System.out.println("Program starting...");

      // load a library that is in Java Library Path
      System.out.println("Loading Library...");
      Runtime.getRuntime().loadLibrary("jaas");
      System.out.println("Library Loaded.");
   }
}

输出

让我们编译并运行上述程序,这将产生以下结果:

Program starting...
Loading Library...
Library Loaded.

示例:加载DLL时的异常

以下示例演示了Java Runtime load()方法的使用。在这个程序中,我们使用load()方法传递不存在的dll的路径来加载它,并打印相应的异常讯息。

package com.tutorialspoint;

public class RuntimeDemo {

   public static void main(String[] args) {

      // print when the program starts
      System.out.println("Program starting...");

      // load a library that is Windows/System32 folder
      System.out.println("Loading Library...");
      Runtime.getRuntime().loadLibrary("C:/Windows/System32/crypt32.dll");
      System.out.println("Library Loaded.");
   }
}

输出

让我们编译并运行上述程序,这将产生以下结果:

Program starting...
Loading Library...
Exception in thread "main" java.lang.UnsatisfiedLinkError: no C:/Windows/System32/crypt32.dll in java.library.path: C:\Program Files\Java\jdk-21\bin;;.
	at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2458)
	at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:916)
	at java.base/java.lang.Runtime.loadLibrary(Runtime.java:903)
	at com.tutorialspoint.RuntimeDemo.main(RuntimeDemo.java:12)

示例:加载EXTNET DLL

以下示例演示了Java Runtime load()方法的使用。在这个程序中,我们使用load()方法传递extnet.dll的相对路径来加载它,并打印相应的讯息。

package com.tutorialspoint;

public class RuntimeDemo {

   public static void main(String[] args) {

      // print when the program starts
      System.out.println("Program starting...");

      // load a library that is in Java Library Path
      System.out.println("Loading Library...");
      Runtime.getRuntime().loadLibrary("extnet");
      System.out.println("Library Loaded.");
   }
}

输出

让我们编译并运行上述程序,这将产生以下结果:

Program starting...
Loading Library...
Library Loaded.
java_lang_runtime.htm
广告
© . All rights reserved.