Не удается найти файл для его динамического выполнения

Я использую динамическое выполнение, но он говорит мне, что класс не найден, хотя я дважды проверил путь, и это правильно

Это метод, который я использую

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"),

Другие вопросы по тегам