在Windows机器上使用com.sun.tools.attach API时,在拨打电话时出现以下错误
VirtualMachine.list()
java.lang.UnsatisfiedLinkError:在java.library.path中不附加
原因是缺lessattach.dll。 attach.dll位于$JRE/bin/
。 当用-Djava.library.path=[Directory to the attach.dll]
启动我的Java程序时,所有内容都可以正常运行,不会出现错误输出。
现在,我不想添加每个Java程序启动这个丑陋的JVM参数。 所以我的问题是:
我的机器没有正确configuration, $JRE/bin/
应该在库path中吗?
如果不是,我该如何dynamic添加path? System.setProperties("java.library.path",StringOfThePathToTheAttach.dll);
不行。 库的path被改变了,但是无论如何,这个错误也是出现的。 有这个事情与SecurityManager或JVM启动?
你的System.setProperty("java.library.path", StringOfThePathToTheAttach.dll);
应该管用。 我的猜测是你太晚了。 换句话说,在设置属性之前试图访问DLL。
在代码中设置属性并在犯规方法调用之前再次输出java.library.path的当前值?
即如果您在看到“设置属性后”之前看到“之前attach.dll调用”输出,您知道您的问题在哪里。
编辑:
指向本地库的更好的方法是使用System.load(StringOfThePathToTheAttach.dll)
– 再次,在违规的代码行之前。
刚刚找到一个可能回答你的问题的链接
“当JVM启动时,java.library.path只读一次,如果使用System.setProperty更改此属性,则不会有任何区别。
http://fahdshariff.blogspot.jp/2011/08/changing-java-library-path-at-runtime.html
System.setProperty("java.library.path", System.getProperty("java.library.path") + File.pathSeparator + FOLDER_THAT_CONTAINS_ATTACH_DLL);