Не удается найти файл для его динамического выполнения
Я использую динамическое выполнение, но он говорит мне, что класс не найден, хотя я дважды проверил путь, и это правильно
Это метод, который я использую
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)
{
}
}
Это печатает
ЗДЕСЬ 1
ЗДЕСЬ 2
ЗДЕСЬ 3
ЗДЕСЬ 4
Класс не найден
ЗДЕСЬ 5
Что-то не хватает в методе
2 ответа
Вы передаете файл.java, читайте о загрузчиках классов, он используется для загрузки классов, а не файлов Java. Сначала скомпилируйте класс, затем попробуйте загрузить его.(После компиляции вам не нужно передавать путь как
/Users/apple/Documents/Documents/workspace/UserTesting/src/two.class
скорее пройти
/ Users / яблоко / Документы / Документы / рабочее пространство / UserTesting / SRC /
Это должно сработать (при условии, что ваш класс скомпилирован и представлен в вышеупомянутом каталоге)
Вы загружаете .java
файл, пытаясь загрузить класс. Сначала вы должны скомпилировать .java
в .class
и только потом грузи его. Вы можете скомпилировать .java
файл динамически через API компилятора Java.
Если у вас уже есть исходный код во время компиляции (вы не генерируете во время выполнения содержимое файла two.java), вам следует вызвать Class.forName("two");
вместо classLoader.loadClass("two")
,