我正在使用动态执行,但它告诉我虽然我仔细检查了路径并且它是正确的但是找不到类
这是我正在使用的方法
public static void runIt(String fileToCompile) throws ClassNotFoundException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException, SecurityException, NoSuchMethodException
{System.out.println("Entered runIt()");
String r2="";
File file=File("/Users/apple/Documents/Documents/workspace/UserTesting/src/two.java");
System.out.println("The path of the file is "+fileToCompile);
System.out.println("HERE 1");
try
{
// Convert File to a URL
URL url = file.toURL(); // file:/classes/demo
URL[] urls = new URL[] { url };
System.out.println("HERE 2");
// Create a new class loader with the directory
ClassLoader loader = new URLClassLoader(urls);
System.out.println("HERE 3");
System.out.println("HERE 4");
Class<?> thisClass=null;
try{
thisClass = classLoader.loadClass("two");
}
catch(ClassNotFoundException e){
System.out.println("Class not found");
}
System.out.println("HERE 5");
Object newClassAInstance = thisClass.newInstance();
System.out.println("HERE 6");
Class params[] = new Class[1];
params[0]=String[].class;
Object paramsObj[] = {};
String m=null;
Object instance = thisClass.newInstance();
System.out.println("HERE 7");
Method thisMethod = thisClass.getDeclaredMethod("main", params);
System.out.println("HERE 8");
String methodParameter = "a quick brown fox";
// run the testAdd() method on the instance:
System.out.println((String)thisMethod.invoke(instance,(Object)m));
}
catch (MalformedURLException e)
{
}
}
打印
HERE 1
HERE 2
HERE 3
HERE 4
未找到班级
HERE 5
方法
中是否缺少任何内容答案 0 :(得分:0)
通过尝试加载类来加载.java
文件。首先,您必须将.java
编译为.class
,然后才加载它。您可以通过Java Compiler API动态编译.java
文件。
如果您已在编译时获得源代码(在运行时未生成two.java的内容),则应调用Class.forName("two");
而不是classLoader.loadClass("two")
。
答案 1 :(得分:0)
您正在传递.java文件,读取类加载器,它用于加载类而不是java文件。首先编译该类,而不是尝试加载它。(一旦编译,你就不必将路径作为
传递/Users/apple/Documents/Documents/workspace/UserTesting/src/two.class
宁愿传递
/用户/苹果/文档/文档/工作区/ UserTesting / SRC /
这应该有用。(假设您的课程已编译并出现在上述目录中)