我试图从Java的JDK导入tools.jar,但是每当尝试从库中创建类的InstantiationException时,都会得到newInstance

到目前为止,我的代码:

File toolsLib = new File("myjdk/lib/tools.jar");
URLClassLoader myClassLoader = new URLClassLoader(new URL[] { toolsLib.toURL() }, System.class.getClassLoader());
Class vmClass = myClassLoader.loadClass("com.sun.tools.attach.VirtualMachine");
vmClass.newInstance(); //This is where I get an InstantiationException


这些都是在与我的主程序不同的线程中完成的。

任何帮助将不胜感激。

最佳答案

com.sun.tools.attach.VirtualMachine的构造函数的修饰符受到保护,并带有两个参数。这就是为什么无法使用newIntance()创建新实例的原因。


仅当构造函数为零时,Class.newInstance()才会成功
参数,并且已经可以访问。


但是,在VirtualMachine上定义了静态的attach方法,可用于获取实例。

另请参阅class instantiation上Oracle的文档。

10-08 12:51