2012-12-25 13 views
6

Sto cercando di ottenere un elenco di tutte le macchine virtuali in esecuzione sul mio computer utilizzando l'API Allega.Risolto il problema: java.lang.UnsatisfiedLinkError: nessun collegamento in java.library.path

Questo è il codice che sto usando:

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(); 
    } 
} 

ERRORE:

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

Per favore fatemi sapere quali metodi posso usare per risolvere questo problema.

Ho anche provato a utilizzare System.load (pathToAdd); Anche io ho fatto riferimento a questo Blog post, ma non funziona. : '(

+1

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

+2

il pathToAdd punta direttamente alla dll, dovrebbe puntare invece alla cartella contenente la dll . –

risposta

4

È necessario:

set PATH =% PATH%; C:/Program Files/Java/jdk1.7.0_03/jre/bin/(su Windows)

export LD_LIBRARY_PATH = path/to/la vostra/library/dir/(su Linux o OSX)

per conformarsi al percorso della vostra libreria nativa, prima di iniziare la JVM

non credo che System.setProperty("java.library.path", pathToAdd); sta lavorando;. e questa è probabilmente la causa del problema

+0

C'è un modo per impostarlo in fase di esecuzione/programmaticamente? –

+2

pathToAdd è sbagliato, dovrebbe puntare alla directory, non alla dll. Probabilmente dovresti scrivere pathToAdd = "C:/Programmi/Java/jdk1.7.0_03/jre/bin /" (senza attach.dll), o MEGLIO puoi fare System.load ("C:/Programmi/Java/jdk1.7.0_03/jre/bin/attach.dll ") isntead –

+0

Ho provato System.load (path/attach.dll); Non funziona. Non ho idea del perché. Potrebbe essere, perché sto usando jdk1.7 –

Problemi correlati