2011-04-06 24 views
14

在使用我的Windows機器上com.sun.tools.attach API,我在打電話給的Java API連接:改變的java.library.path動態

VirtualMachine.list() 

Java時,出現以下錯誤。 lang.UnsatisfiedLinkError:java.library.path中無附加

原因是缺少attach.dll。 attach.dll位於$JRE/bin/。當使用-Djava.library.path=[Directory to the attach.dll]啓動我的Java程序時,所有內容都可以正常運行,不會出現錯誤輸出。

現在,我不想添加每個Java程序啓動這個醜陋的JVM參數。所以我的問題是:

  1. 是不是正確的配置我的機器和$JRE/bin/應該在庫路徑呢?

  2. 如果不是,我該如何動態添加路徑? System.setProperties("java.library.path",StringOfThePathToTheAttach.dll);不工作。庫路徑已更改,但錯誤仍然存​​在。這是否與SecurityManager或JVM啓動有關?

+0

更改庫路徑後,您是否使用新的Classloader? – 2011-04-06 11:15:14

+0

@ joseph-ottinger:不,我想我應該? – 2011-04-06 12:38:34

回答

5

您的System.setProperty("java.library.path", StringOfThePathToTheAttach.dll);應該工作。我的猜測是你太晚了。換句話說,在設置屬性之前嘗試訪問DLL。

您可以輸出java.library.path的當前值,該屬性在代碼中設置後再次在違規方法調用之前?

即如果您在看到「設置屬性後」之前看到「在attach.dll調用之前」輸出,則知道問題出在哪裏。

編輯:

一種更好的方式來指向本地庫是使用System.load(StringOfThePathToTheAttach.dll) - 再次,問題的代碼行之前。

+0

@ Teddy-yueh我不確定,如果這是我的任務加載該dll文件。畢竟在我的Ubuntu機器上,attach.so庫的路徑已經被鏈接了。我猜我的windows機器配置不佳。 – 2011-04-07 16:42:00

5
System.setProperty("java.library.path", System.getProperty("java.library.path") + File.pathSeparator + FOLDER_THAT_CONTAINS_ATTACH_DLL); 
+5

如果你不向右滾動,這是一個非常糟糕的解決方案;) – JustinKSU 2011-05-09 20:40:56