Java Attach API:动态更改 java.library.path

2022-09-03 01:58:23

在我的Windows计算机上使用com.sun.tools.attach API时,我在调用时收到以下错误

VirtualMachine.list()

java.lang.UnsatisfiedLinkError: no attach in java.library.path

原因是缺少附加.dll。附加.dll位于 中。当启动我的Java程序时,一切都会在没有错误输出的情况下工作。$JRE/bin/-Djava.library.path=[Directory to the attach.dll]

现在,我不想添加每个Java程序启动这个丑陋的JVM参数。因此,我的问题是:

  1. 我的计算机是否配置不正确,并且无论如何都应该在库路径中?$JRE/bin/

  2. 如果没有,如何动态添加路径? 不起作用。库路径已更改,但无论如何都会出现错误。这与SecurityManager或JVM启动有关吗?System.setProperties("java.library.path",StringOfThePathToTheAttach.dll);


答案 1

刚刚找到一个可能回答您问题的链接

“java.library.path 在 JVM 启动时只读取一次。如果您使用 System.setProperty 更改此属性,则不会有任何区别。

http://fahdshariff.blogspot.jp/2011/08/changing-java-library-path-at-runtime.html


答案 2

你应该工作。我的猜测是你说它太晚了。换句话说,在设置属性之前,会尝试访问 DLL。System.setProperty("java.library.path", StringOfThePathToTheAttach.dll);

是否可以在代码中设置属性后输出 java.library.path 的当前值,并在违规方法调用之前再次输出 java.library.path 的当前值?

即,如果您在看到“设置属性后”之前看到“附加之前.dll调用”输出,则您知道问题出在哪里。

编辑:

指向本机库的更好方法是使用 - 再次,在有问题的代码行之前。System.load(StringOfThePathToTheAttach.dll)


推荐