2012-12-25 17 views
6

Eklenti API'sini kullanarak makinemde çalışan tüm VM'lerin bir listesini almaya çalışıyorum. Düzeltme: java.lang.UnsatisfiedLinkError: ek yok java.library.path

Bu

i kullanıyorum kodudur:

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

HATA:

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

beni ben bu sorunu gidermek için kullanabileceğiniz hangi yöntemleri bildirin.

Ayrıca System.load (pathToAdd) kullanmayı denedim; Ayrıca bu Blog post başvurdu, ancak çalışmıyor. : '(

+1

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

+2

yolunuza tıklayınYolunYol, dll'yi doğrudan işaret ediyor, bunun yerine dll içeren klasörü göstermesi gerekir. . –

cevap

4

Sen gerekir:

seti YOLU =% PATH%; C:/Program Files/Java/jdk1.7.0_03/jre/bin/(

ihracat LD_LIBRARY_PATH) Windows =/yol/sizin/kütüphane/dir/(Linux veya OSX'te)

Jvm başlamadan önce, kendi ana kütüphane yoluna uymayı

Ben System.setProperty("java.library.path", pathToAdd); çalıştığını düşünmüyorum;. ve Muhtemelen sorunun nedeni budur.

+0

Çalışma zamanı/programatik olarak bunu ayarlamanın bir yolu var mı? –

+2

pathToAdd yanlış, dizine değil dll'ye işaret etmelidir. Muhtemelen pathToAdd = "C:/Program Files/Java/jdk1.7.0_03/jre/bin /" (attach.dll olmadan) veya System.load ("C:/Program Dosyaları/Java/jdk1.7.0_03/jre/bin/attach.dll ") isntead –

+0

System.load (yol/attach.dll) çalıştı; Çalışmıyor. Neden olduğuna dair hiçbir fikrim yok. Olabilir, jdk1.7 kullanıyorum çünkü –

İlgili konular