2012-12-25 10 views
6

में कोई अनुलग्नक मैं अटैच एपीआई का उपयोग करके मेरी मशीन पर चल रहे सभी वीएम की एक सूची प्राप्त करने का प्रयास कर रहा हूं।इसे ठीक करें: java.lang.UnsatisfiedLinkError: java.library.path

इस कोड मैं का उपयोग कर रहा है:

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

त्रुटि:

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

कृपया मुझे पता है कि तरीकों मैं इसे ठीक करने के लिए उपयोग कर सकते हैं।

मैंने System.load (pathToAdd) का उपयोग करने का भी प्रयास किया है; इसके अलावा मैंने इस Blog post को संदर्भित किया है, लेकिन यह काम नहीं करता है। : '(

+1

देखें http://stackoverflow.com/questions/5565356/java-attach-api-changing-java-library-path- गतिशील रूप से –

+2

आपका पथटॉइड सीधे डीएल पर इंगित कर रहा है, इसे इसके बजाय डीएलएल वाले फ़ोल्डर को इंगित करना चाहिए । –

उत्तर

4

आप की जरूरत है:

सेट पथ =% पथ%; सी:/प्रोग्राम फ़ाइलें/जावा/jdk1.7.0_03/JRE/bin/(Windows पर)

निर्यात LD_LIBRARY_PATH = path/to/अपने/पुस्तकालय/dir/(लिनक्स या OSX पर)

JVM शुरू करने से पहले, अपनी मूल पुस्तकालय के रास्ते पर पालन करने के लिए

मुझे नहीं लगता कि System.setProperty("java.library.path", pathToAdd); काम कर रहा है;। और यह शायद समस्या का कारण है।

+0

क्या इसे रनटाइम/प्रोग्रामेटिक रूप से सेट करने का कोई तरीका है? –

+2

pathToAdd गलत है, यह निर्देशिका को इंगित करना चाहिए, डीएल नहीं। आपको शायद pathToAdd = "सी:/प्रोग्राम फ़ाइलें/जावा/jdk1.7.0_03/jre/bin /" (attach.dll के बिना) लिखना चाहिए, या बेहतर आप System.load ("सी:/प्रोग्राम फ़ाइलें/जावा/jdk1.7.0_03/jre/bin/attach.dll ") isntead –

+0

मैंने System.load (path/attach.dll) की कोशिश की; यह काम नहीं करता है। मुझे कोई जानकारी नहीं है की क्यों। यह हो सकता है, क्योंकि मैं jdk1.7 –

संबंधित मुद्दे