【问题标题】:Fix the: java.lang.UnsatisfiedLinkError: no attach in java.library.path修复:java.lang.UnsatisfiedLinkError: no attach in java.library.path
【发布时间】:2012-12-11 05:15:44
【问题描述】:

我正在尝试使用 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:提供者 sun.tools.attach.WindowsAttachProvider 无法实例化: java.lang.UnsatisfiedLinkError: java.library.path 中没有附加

请让我知道我可以使用哪些方法来解决此问题。

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

【问题讨论】:

标签: java virtual-machine


【解决方案1】:

你需要:

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

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

在启动 jvm 之前符合您的本机库的路径。

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

【讨论】:

  • 有没有办法在运行时/以编程方式设置它?
  • pathToAdd 错误,它应该指向目录,而不是 dll。你可能应该写 pathToAdd = "C:/Program Files/Java/jdk1.7.0_03/jre/bin/" (没有 attach.dll),或者更好的是你可以做 System.load("C:/Program Files/Java/ jdk1.7.0_03/jre/bin/attach.dll") 不是
  • 我试过 System.load(path/attach.dll);它不起作用。我不知道为什么。会不会,因为我用的是jdk1.7
  • 您是否尝试过使用“C:/Program Files/Java/jdk1.7.0_03/jre/bin”而不是“C:/Program Files/Java/jdk1.7.0_03/jre/bin” /attach.dll”在 pathToAdd?; “可能是因为我使用的是 jdk1.7”
  • 谢谢老兄,这行得通。我正在添加文件而不是添加路径:3。我使用了这段代码:fahdshariff.blogspot.jp/2011/08/…>这段代码重置了库路径并附加了我想要添加的路径。干杯
猜你喜欢
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 2013-04-27
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
相关资源
最近更新 更多