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.