Java附加API:动态更改Java.library.path
在我的Windows计算机上使用com.sun.tools.attach API时,调用时出现以下错误Java附加API:动态更改Java.library.path,java,windows,jvm,Java,Windows,Jvm,在我的Windows计算机上使用com.sun.tools.attach API时,调用时出现以下错误 VirtualMachine.list() java.lang.UnsatifiedLink错误:java.library.path中没有附加 原因是缺少attach.dll。attach.dll位于$JRE/bin/中。使用-Djava.library.path=[attach.dll的目录]启动Java程序时,一切正常,输出无误 现在,我不想添加每个Java程序来启动这个丑陋的JVM参数
VirtualMachine.list()
java.lang.UnsatifiedLink错误:java.library.path中没有附加
原因是缺少attach.dll。attach.dll位于$JRE/bin/
中。使用-Djava.library.path=[attach.dll的目录]
启动Java程序时,一切正常,输出无误
现在,我不想添加每个Java程序来启动这个丑陋的JVM参数。因此,我的问题是:
$JRE/bin/
仍应位于库路径中您的
System.setProperty(“java.library.path”,stringofpathtotheatch.dll)代码>应该可以工作。我猜你说得太晚了。换句话说,在设置属性之前,有人试图访问DLL
您能否在代码中设置属性之后,在有问题的方法调用之前,输出java.library.path的当前值
i、 e.如果您在看到“设置属性后”之前看到“在attach.dll调用之前”输出,您就知道问题所在
编辑:
指向本机库的更好方法是使用System.load(StringOfPathToTheatch.dll)
——同样,在出现问题的代码行之前。刚刚找到一个可能回答您问题的链接
System.setProperty("java.library.path", System.getProperty("java.library.path") + File.pathSeparator + FOLDER_THAT_CONTAINS_ATTACH_DLL);
JVM启动时,java.library.path只读取一次。如果使用System.setProperty更改此属性,则不会有任何区别
更改库路径后,是否使用新的类加载器?@joseph ottinger:不,我想我应该这样做?@Teddy yueh我不确定加载dll文件是否是我的任务。毕竟在我的Ubuntu机器上,attach.so库路径已经链接到了。我猜我的windows计算机只是配置得很差。如果不向右滚动,这是一个非常糟糕的解决方案;)