Tôi đang cố gắng lấy danh sách tất cả các máy ảo đang chạy trên máy của mình bằng cách sử dụng API đính kèm.Khắc phục: java.lang.UnsatisfiedLinkError: không đính kèm trong java.library.path
Đây là mã tôi đang sử dụng:
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();
}
}
LỖI:
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
Xin vui lòng cho tôi biết những gì các phương pháp tôi có thể sử dụng để sửa lỗi này.
Tôi cũng đã thử sử dụng System.load (pathToAdd); Ngoài ra tôi đã đề cập đến điều này Blog post, nhưng nó không hoạt động. : '(
Xem http://stackoverflow.com/questions/5565356/java-attach-api-changing-java-library-path-dynamically –
pathToAdd của bạn trỏ trực tiếp vào dll, nó sẽ trỏ đến thư mục chứa dll thay vào đó . –