在Eclipse中使用attach API时会在控制台中抛出错误。
为了使用附加API我在eclipse中安装了JRE,然后在当前JRE的外部jar选项中使用了包含tools.jar的编辑选项。
但是当我尝试执行一个简单的程序,例如
时,它会抛出以下错误java.lang.UnsatisfiedLinkError:java.library.path中没有附加 com.sun.tools.attach.AttachNotSupportedException:没有提供者 安装在 com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:190) 在dynamicLoadingTest.VMAttach.main(VMAttach.java:17)
这是执行的简单程序。 import java.io.IOException;
import com.sun.tools.attach.AttachNotSupportedException;
import com.sun.tools.attach.VirtualMachine;
public class VMAttach {
public static void main(String[] args) {
try {
VirtualMachine vm = VirtualMachine.attach("6832");
} catch (AttachNotSupportedException e) {
System.out.println("This error");
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
提到的进程ID 6832 是在系统上运行的Java应用程序
将安装的jre更改为jdk后会产生错误
Exception in thread "main" com.sun.tools.attach.AttachNotSupportedException: jvm.dll not loaded by target process
at sun.tools.attach.WindowsVirtualMachine.<init>(WindowsVirtualMachine.java:46)
at sun.tools.attach.WindowsAttachProvider.attachVirtualMachine(WindowsAttachProvider.java:52)
at com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:195)
at dynamicLoadingTest.VMAttach.main(VMAttach.java:17)
答案 0 :(得分:9)
实际上,当您的系统中有不同的jdks并且所有jdks都包含在类路径中时,会出现此问题。
答案 1 :(得分:3)
对我来说,解决方案是将attach.dll
从JDK(与JRE相同的版本)放入JRE的bin
目录。
答案 2 :(得分:1)
我尝试使用JDK1.7,它运行正常。使用JDK1.6时,问题仍然存在。