2012-12-25 11 views
6

Ich versuche, eine Liste aller VMs auf meinem Computer mit der Attach API zu erhalten.Fix: java.lang.UnsatisfiedLinkError: kein Anhang in java.library.path

Dies ist der Code ich verwende:

import java.lang.reflect.Field; 
import java.util.List; 
import com.sun.tools.attach.*; 

public class JVMListManager 
{ 
    static String pathToAdd = "C:/Program Files/Java/jdk1.7.0_03/jre/bin/attach.dll"; 
    public static void setLibraryPath(String path) throws Exception { 
     System.setProperty("java.library.path", pathToAdd); 

     Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths"); 
     fieldSysPath.setAccessible(true); 
     fieldSysPath.set(null, null); 
    } 

    private void listActiveVM() 
    { 
     List<VirtualMachineDescriptor> vm = VirtualMachine.list(); 
     int i= 1; 
     for(VirtualMachineDescriptor vmD : vm) 
     { 
      System.out.println(i + ". " + vmD.displayName()); 
      i++; 
     } 
    } 

    public static void main(String[] args) throws Exception 
    { 
     setLibraryPath(pathToAdd); 

     JVMListManager jvmListManager = new JVMListManager(); 
     jvmListManager.listActiveVM(); 
    } 
} 

ERROR:

java.util.ServiceConfigurationError: com.sun.tools.attach.spi.AttachProvider: Provider sun.tools.attach.WindowsAttachProvider could not be instantiated: java.lang.UnsatisfiedLinkError: no attach in java.library.path

Bitte lassen Sie mich wissen, welche Methoden ich dieses Problem beheben können.

Ich habe auch versucht, mit System.load (pathToAdd); Auch ich habe auf diese Blog post verwiesen, aber es funktioniert nicht. : '(

+1

Siehe http://stackoverflow.com/questions/5565356/java-attach-api-changing-java-library-path-dynamically –

+2

Ihr pathToAdd zeigt direkt auf die DLL, es sollte stattdessen auf den Ordner zeigen, der die DLL enthält . –

Antwort

4

Sie müssen:

set PATH =% PATH%; C:/Programme/Java/jdk1.7.0_03/jre/bin/(unter Windows)

export LD_LIBRARY_PATH = path/to/your/Bibliothek/dir/(unter Linux oder OSX)

auf den Pfad Ihrer native Bibliothek zu erfüllen, bevor die JVM beginnend

ich glaube nicht, dass System.setProperty("java.library.path", pathToAdd); arbeitet;. und Dies ist wahrscheinlich die Ursache des Problems

+0

Gibt es eine Möglichkeit dies zur Laufzeit/programmatisch einzustellen? –

+2

pathToAdd ist falsch, es sollte auf das Verzeichnis zeigen, nicht auf die DLL. Sie sollten wahrscheinlich pathToAdd = "C:/Programme/Java/jdk1.7.0_03/jre/bin /" (ohne attach.dll) schreiben, oder besser können Sie System.load ("C:/Programme/Java/jdk1.7.0_03/jre/bin/attach.dll ") ist nur –

+0

Ich habe versucht System.load (path/attach.dll); Es funktioniert nicht. Ich habe keine Idee warum. Könnte es sein, weil ich jdk1.7 verwende –

Verwandte Themen