Java Attach API:dynamic改变java.library.path

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参数。 所以我的问题是:

  1. 我的机器没有正确configuration, $JRE/bin/应该在库path中吗?

  2. 如果不是,我该如何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);