Exception in thread "main" java.lang.Unsat

jRegistryKey目前最新版本为:1.4.5

Java使用jRegistryKey操作Windows注册表时抛出了以上问题,按照官方说的将jRegistryKey.dll文件放到%SystemRoot%\system32文件夹下面,导入相应JAR包即可,这种方式在32系统中可能运行通过(我在虚拟机XP系统中测试通过),但在Windows7(64位)系统中却不行,查看一下Java代码:

import ca.beq.util.win32.registry.RegistryKey;import ca.beq.util.win32.registry.RegistryValue;import ca.beq.util.win32.registry.RootKey;public class RegEdit {??public static void main(String[] args) {RegistryKey rk = new RegistryKey(RootKey.HKEY_LOCAL_MACHINE, "SOFTWARE\\Macromedia\\FlashPlayerPlugin");String installPath = "";if(rk.hasValue("UninstallerPath")) {RegistryValue rv = rk.getValue("UninstallerPath");installPath = rv.getData().toString();}else{System.err.println("查找的数值名称不存在!");}System.out.println(installPath);}?}

导入的包路径为ca.beq.util.win32,由此猜想jRegistryKey是不是只支持32系统而不支持64位系统?

Google了一把有个帖子也是出现了这个问题,其中有人说:“第一次newRegistryKey()时,会通过loadLibrary(…)将dll文件装入内存,找不到时就会产生UnsatisfiedLinkError”,最后楼主自己解决了这个异常,但却没拿出来分享,想想也太不厚道!

但略有收获,毕竟上面这句话提醒了我,于是直接想通过Java在newRegistryKey()前先将dll文件加载到内存中:

System.loadLibrary("jRegistryKey.dll");

测试不通过,却报出以下异常:

Exceptioninthread"main"java.lang.UnsatisfiedLinkError:nojRegistryKey.dllinjava.library.path

最后通过以下语句输出java.library.path,获得的是环境变量中Path的值:

System.out.println(System.getProperty("java.library.path"));

D:\ProgramFiles\Java\jdk1.6.0_30\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;D:/ProgramFiles/MyEclipse/binary/com.sun.java.jdk.win32.x86_1.6.0.013/jre/bin/client;D:/ProgramFiles/MyEclipse/binary/com.sun.java.jdk.win32.x86_1.6.0.013/jre/bin;F:\ProgramFiles\Oracle\product\11.1.0\db_1\bin;C:\ProgramFiles(x86)\AMDAPP\bin\x86_64;。。。。。。

注意标红那句,恍然大悟后解决方法自然而来,将jRegistryKey.dll文件放到jdk1.6.0_30\bin目录下即可!

这样算不算是解决了兼容性的问题呢?O(∩_∩)O

一个人去旅行,而且是去故乡的山水间徜徉。

Exception in thread "main" java.lang.Unsat

相关文章:

你感兴趣的文章:

标签云: