Java Attach API: changing java.library.path dynamically

11,766

Solution 1

Your System.setProperty("java.library.path", StringOfThePathToTheAttach.dll); should work. My guess is that you're calling it too late. In other words, there is an attempt to access the DLL prior to you setting the property.

Can you output the current value for java.library.path after the property is set in code and again before the offending method call?

i.e. If you see "Before attach.dll call" output prior to seeing "After setting property", you know where your problem is.

Edit:

A better way to point to native libraries is to use System.load(StringOfThePathToTheAttach.dll) - again, before the offending line of code.

Solution 2

Just found a link that might answer your question

"The java.library.path is read only once when the JVM starts up. If you change this property using System.setProperty, it won't make any difference."

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

Solution 3

System.setProperty("java.library.path", System.getProperty("java.library.path") + File.pathSeparator + FOLDER_THAT_CONTAINS_ATTACH_DLL);
Share:
11,766

Related videos on Youtube

Konrad Reiche
Author by

Konrad Reiche

Updated on April 14, 2020

Comments

  • Konrad Reiche
    Konrad Reiche about 4 years

    When using the com.sun.tools.attach API on my Windows machine, I get the following error when making a call to

    VirtualMachine.list()
    

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

    The reason is the missing attach.dll. The attach.dll is located in $JRE/bin/. When starting my Java program with -Djava.library.path=[Directory to the attach.dll] everything works out without error output.

    Now, I don't want to add every Java program start this ugly JVM parameter. Therefore my questions are:

    1. Is my machine not configured right and the $JRE/bin/ should be in the library path anyway?

    2. If not, how can I add the path dynamically? System.setProperties("java.library.path",StringOfThePathToTheAttach.dll); does not work out. The library path is changed, but the error apperas anyway. Has this something to do with SecurityManager or JVM start up?

  • Konrad Reiche
    Konrad Reiche about 13 years
    @Teddy-yueh I am not sure, if it is my task to load the dll file. After all on my Ubuntu machine the attach.so library path is already linked in. I guess my windows machine was just configured poorly.
  • JustinKSU
    JustinKSU almost 13 years
    That's a really horrible solution if you don't scroll to the right ;)