我想运行位于文件夹C:\ classes \
中的包Test2中Main.class的构造函数这是我正在使用的代码。当它试图将它变成一个类时,它抛出一个类未找到的异常。然后,一旦它是类对象的一部分,构造函数会自动运行,还是我必须以某种方式实例化它? Test2作为文本输入到此代码中。
if (Main.os.equals("Windows"))
{
String path = "C:\\classes\\";
}
else
{
String path = "~/classes/";
}
File file = new File(path);
try
{
URL url = file.toURI().toURL();
URL[] urls = new URL[]{url};
Main.print("Stage 1");
ClassLoader cl = new URLClassLoader(urls);
Main.print("Stage 2");
Class cls = cl.loadClass(text + ".Main");
Main.print(text + " was loaded into memory.");
close();
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
答案 0 :(得分:1)
我怀疑您的问题是以下之一:
file
不存在或未正确指定。通过file.exists()
Main
类的包声明为package Test2;
,那么您的类文件必须位于以下位置:C:\classes\Test2\Main.class
。cl.loadClass("Test2.EnclosingClass$Main");
我猜你的问题是2号! :)
祝你好运。哦,是的,如果你想要调用构造函数,你需要创建一个对象的实例:clazz.newInstance()
是no-args构造函数的最简单方法。
答案 1 :(得分:0)
您能否发布确切的错误消息。
但这是我如何执行使用类加载器的主要方法
urlLoader = new URLClassLoader(urls);
Class runClass = urlLoader.loadClass(classToRun);
System.out.println("Starting Program !!!");
Object[] arguments = new Object[]{args};
Method mainMethod = runClass.getMethod("main", new Class[] {args.getClass()});
mainMethod.invoke(null, arguments);
注意: classToRun 将是完整的包/类定义 即 net.sf.RecordEditor.edit.FullEditor
注意:我用它从jar文件加载,它与目录类似
取自此处的运行类