修复:java.lang.UnsatisfiedLinkError:java.library.path中没有附加

时间:2012-12-25 02:16:52

标签: java virtual-machine

我正在尝试使用Attach API获取在我的机器上运行的所有VM的列表。

这是我正在使用的代码:

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无法实例化:   java.lang.UnsatisfiedLinkError:java.library.path中没有附件

请让我知道我可以用什么方法来解决这个问题。

我也尝试过使用System.load(pathToAdd); 我也提到了这个Blog post,但它不起作用。 :'(

1 个答案:

答案 0 :(得分:4)

你需要:

设置PATH =%PATH%; C:/ Program Files / Java / jdk1.7.0_03 / jre / bin /(在Windows上)

export LD_LIBRARY_PATH = path / to / your / library / dir /(在Linux或OSX上)

在启动jvm之前遵守本机库的路径。

我不认为System.setProperty( "java.library.path", pathToAdd );正在发挥作用;这可能是问题的原因。