`

关于Java装载库文件

阅读更多
System.load 和 System.loadLibrary详解

1.它们都可以用来装载库文件,不论是JNI库文件还是非JNI库文件。在任何本地方法被调用之前必须先用这个两个方法之一把相应的JNI库文件装载。

2.System.load 参数为库文件的绝对路径,可以是任意路径。
例如你可以这样载入一个windows平台下JNI库文件:
System.load("C:\\Documents and Settings\\TestJNI.dll");。


3. System.loadLibrary 参数为库文件名,不包含库文件的扩展名。
例如你可以这样载入一个windows平台下JNI库文件
System. loadLibrary ("TestJNI");


这里,TestJNI.dll 必须是在java.library.path这一jvm变量所指向的路径中。
可以通过如下方法来获得该变量的值:
System.getProperty("java.library.path");


默认情况下,在Windows平台下,该值包含如下位置:
1)和jre相关的一些目录
2)程序当前目录
3)Windows目录
4)系统目录(system32)
5)系统环境变量path指定目录

4.如果你要载入的库文件静态链接到其它动态链接库,例如TestJNI.dll 静态链接到dependency.dll, 那么你必须注意:
1)如果你选择
System.load("C:\\Documents and Settings\\ TestJNI.dll");

那 么即使你把dependency.dll同样放在C:\\Documents and Settings\\下,load还是会因为找不到依赖的dll而失败。因为jvm在载入TestJNI.dll会先去载入TestJNI.dll所依赖 的库文件dependency.dll,而dependency.dll并不位于java.library.path所指定的目录下,所以jvm找不到 dependency.dll。
你有两个方法解决这个问题:
一是把C:\\Documents and Settings\\加入到java.library.path的路径中,例如加入到系统的path中。二是先调用
System.load("C:\\Documents and Settings\\ dependency.dll");
让jvm先载入dependency.dll,然后再调用
System.load("C:\\Documents and Settings\\ TestJNI.dll");

2)如果你选择
System. loadLibrary ("TestJNI");

那么你只要把dependency.dll放在任何java.library.path包含的路径中即可,当然也包括和TestJNI.dll相同的目录。

java的System.getProperty()方法可以获取的值

java.version
Java 运行时环境版本

java.vendor
Java 运行时环境供应商

java.vendor.url
Java 供应商的 URL

java.home
Java 安装目录

java.vm.specification.version
Java 虚拟机规范版本

java.vm.specification.vendor
Java 虚拟机规范供应商

java.vm.specification.name
Java 虚拟机规范名称

java.vm.version
Java 虚拟机实现版本

java.vm.vendor
Java 虚拟机实现供应商

java.vm.name
Java 虚拟机实现名称

java.specification.version
Java 运行时环境规范版本

java.specification.vendor
Java 运行时环境规范供应商

java.specification.name
Java 运行时环境规范名称

java.class.version
Java 类格式版本号

java.class.path
Java 类路径

java.library.path
加载库时搜索的路径列表

java.io.tmpdir
默认的临时文件路径

java.compiler
要使用的 JIT 编译器的名称

java.ext.dirs
一个或多个扩展目录的路径

os.name
操作系统的名称

os.arch
操作系统的架构

os.version
操作系统的版本

file.separator
文件分隔符(在 UNIX 系统中是“/”)

path.separator
路径分隔符(在 UNIX 系统中是“:”)

line.separator
行分隔符(在 UNIX 系统中是“/n”)

user.name
用户的账户名称

user.home
用户的主目录

user.dir
用户的当前工作目录



public class SystemProperty {   
    public static void main(String args[]) {      
    System.out.println("java_vendor:" + System.getProperty("java.vendor"));      
    System.out.println("java_vendor_url:"      
             + System.getProperty("java.vendor.url"));      
    System.out.println("java_home:" + System.getProperty("java.home"));      
    System.out.println("java_class_version:"      
             + System.getProperty("java.class.version"));      
    System.out.println("java_class_path:"      
            + System.getProperty("java.class.path"));      
    System.out.println("os_name:" + System.getProperty("os.name"));      
    System.out.println("os_arch:" + System.getProperty("os.arch"));      
    System.out.println("os_version:" + System.getProperty("os.version"));      
    System.out.println("user_name:" + System.getProperty("user.name"));      
    System.out.println("user_home:" + System.getProperty("user.home"));      
    System.out.println("user_dir:" + System.getProperty("user.dir"));      
    System.out.println("java_vm_specification_version:"      
            + System.getProperty("java.vm.specification.version"));      
    System.out.println("java_vm_specification_vendor:"      
            + System.getProperty("java.vm.specification.vendor"));      
    System.out.println("java_vm_specification_name:"      
            + System.getProperty("java.vm.specification.name"));      
    System.out.println("java_vm_version:"      
            + System.getProperty("java.vm.version"));      
    System.out.println("java_vm_vendor:"      
            + System.getProperty("java.vm.vendor"));      
    System.out      
            .println("java_vm_name:" + System.getProperty("java.vm.name"));      
    System.out.println("java_ext_dirs:"      
            + System.getProperty("java.ext.dirs"));      
    System.out.println("file_separator:"      
            + System.getProperty("file.separator"));      
    System.out.println("path_separator:"      
            + System.getProperty("path.separator"));      
    System.out.println("line_separator:"      
            + System.getProperty("line.separator"));      
}     
分享到:
评论

相关推荐

    Java虚拟机类装载:原理、实现与应用

    在实际应用中,类装载机制使得Java应用程序能够灵活地加载不同版本的库,或者在运行时根据需要加载特定功能的类。比如,Web服务器会使用自定义的ClassLoader来加载每个Web应用的类,这样各个应用之间的类就可以保持...

    java装载工具及方法指导

    "Softick PPP 2.21.rar"和"Samsung XXXX Java Uploder 汉化版.rar"这两个文件似乎与Java装载工具和方法不太直接相关,它们可能是Java应用程序或工具,如用于手机平台的Java应用上传工具,对于理解Java装载原理帮助较...

    Java虚拟机类装载机制

    这种模型保证了Java核心库类的一致性和安全性。 了解并掌握Java虚拟机的类装载机制对于理解和优化Java应用的性能、实现动态加载和插件系统至关重要。开发者可以通过自定义类加载器实现特定的加载逻辑,如加载来自...

    java源码包---java 源码 大量 实例

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

    Java的类装载器和命名空间

    类装载器负责将类文件加载到Java虚拟机(JVM)中,而命名空间则帮助组织和管理这些类,避免命名冲突。 1. **类装载器(ClassLoader)** 类装载器是Java动态性的一个关键组件,它们根据类的全限定名(包括包名和...

    Java虚拟机类装载:原理、实现与应用.doc

    - 系统类装载器是JVM内置的,用于加载Java标准库的类。 理解类装载机制对于优化程序性能、实现动态加载、插件系统以及增强程序的灵活性具有重要意义。例如,通过自定义类装载器,开发者可以在运行时替换或添加新的...

    java源码包3

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

    JAVA API官方中文文档

    所有被装载的class文件(包括从应用程序中和从Java API中提取的)和所有已经装载的动态库(包含本地方法)共同组成了在Java虚拟机上运行的整个程序。 在一个平台能够支持Java程序以前,必须在这个特定平台上明确地实现...

    java源码包2

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

    [浅析J2EE应用服务器的JAVA类装载器]python回朔异常的模块.docx

    Java类装载器是Java虚拟机(JVM)的一部分,负责加载类文件到JVM内存中。由于Java程序由多个类组成,这些类不是一次性全部加载,而是按需加载。当JVM需要使用某个类时,它会向相应的类装载器发出请求。类装载器负责...

    java api1.6

    所有被装载的class文件(包括从应用程序中和从Java API中提取的)和所有已经装载的动态库(包含本地方法)共同组成了再Java虚拟机上运行的整个程序。 在一个平台能够支持Java程序以前,必须在这个特定平台上明确地实现...

    Java开发技术大全(500个源代码).

    HelloNative.lib 用VC编译生成的静态库文件 HelloNative.obj 用VB编译生成的目标文件 HelloNativeTest.java 测试本地化是否成功的类文件 instanceVar.java 定义一个实例成员变量 invokeByObject.java 对象实参...

    在Java中用类装载框架控制类加载

    摘要通过构建一个能够把Java类装载隔离到一个指定的jar文件中的类装载组件容器框架,你可以确保运行时刻会装载你期望的组件版本。Java的类装载框架强有力且具有灵活性。它允许应用程序存取类库而不必链接到静态的...

    java核心概念

    Java虚拟机保证了代码的跨平台运行,类装载器允许动态加载和自定义行为,class文件实现了平台无关性,而Java API则为开发者提供了丰富的功能库,简化了网络应用的开发。通过深入学习和掌握这些概念,开发者能更好地...

    C++调用java方式

    1. **初始化JVM**: C++程序需要启动Java虚拟机,并找到要调用的类所在的类装载器。 2. **加载类**: 使用FindClass方法加载Java类。 3. **获取方法ID**: 通过GetMethodID获取Java方法的ID,需要指定方法名和方法签名...

    java程序员考试题库

    Java字节码文件的扩展名应为.java:不正确,字节码文件的扩展名为.class。 - D. 一个Java源文件中只能包含一个Java类:不正确,一个源文件可以包含多个类,但只能有一个public类。 - **正确答案**:AB #### 三、...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    图片到图片装载器、绘制火焰效果的X坐标,Y坐标、得到X坐标,Y坐标值、绘制火焰效果Image…… Java加密解密工具集 JCT v1.0源码包 5个目标文件 内容索引:JAVA源码,综合应用,JCT,加密解密 WDSsoft的一款免费源代码 JCT ...

    浅谈java中的四个核心概念

    1. **引导类装载器(Bootstrap ClassLoader)**:是最顶层的类装载器,用于装载Java核心库(如rt.jar等),这些核心库位于JAVA_HOME/lib目录下。 2. **扩展类装载器(Extension ClassLoader)**:用于装载扩展库,...

    java JAVA_OPTS javaagent

    `JAVA_OPTS`通常用于传递额外的JVM参数,如内存分配、日志配置等,而`javaagent`则是用于指定预加载的Java代理(Java Agent),它可以在应用程序启动之前运行,提供类装载器拦截、字节码操作等功能。 在Java中,`...

Global site tag (gtag.js) - Google Analytics