powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема с поиском класса
3 сообщений из 3, страница 1 из 1
Проблема с поиском класса
    #37605485
Sievs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

Делаю динамическую компиляцию класса в приложении. Из файла .java компилируется .class и происходит вызов функции из скомпилированного класса.

Проблема заключается в том, что при вызове из построенного приложения (папка dist в NetBeans) не происходит вызова скомпилированного класса (сам класс компилируется в папке).
Возвращается ошибка:

Код: java
1.
2.
3.
4.
5.
6.
java.lang.ClassNotFoundException: TestClass
at java.lang.ClassLoader.findClass(ClassLoader.java:373)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
at testcompile.ComRun.<init>(ComRun.java:56)
at testcompile.TestCompile.main(TestCompile.java:9)



При этом непосредственно при запуске из NetBeans всё работает
В библиотеки проекта добавлена папка с местонахождением классов, путь относительный.

Чую что дело в classpath, но указание в качестве параметра -classpath не помогает.

Подскажите в чем может быть дело?

Код следующий:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;


public class ComRun {
    
        
    class SomeLoader extends ClassLoader{

    }

    public ComRun() {
                //это список файлов для компиляции
        ArrayList<String> files1 = new ArrayList<String>();
        files1.add("TestClass.java");
        
        //получаем стандартный JIT компилятор и файловый менеджер
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
        
        
        //получаем список чего-то, наследующего JavaFileObject
        //список можно получать как из коллекции имен файлов, так и собстно файлов
        Iterable<? extends JavaFileObject> compilationUnits1 =
            fileManager.getJavaFileObjectsFromStrings(files1);
        
        
        //получили задачу для компилятора и запустили его на выполнение
        //в итоге в текущем каталоге будет создан TestClass.class
        compiler.getTask(null, fileManager, null, null, null, compilationUnits1).call();
        
        try {
            fileManager.close();
            
            ClassLoader l = new SomeLoader();
            Class<?> clazz = l.loadClass("TestClass");
            //следующие две строки задают массив параметров (в нашем случае пустых)
            Class<?> cl[]=null;
            Object ob[]=null;
            Method ptest = clazz.getMethod("ptest", cl);
            Object o = clazz.newInstance();
            //ну и соссно вызываем метод, определенный в нашем классе
            ptest.invoke(o, ob);
            
        }catch(IOException e){
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}
...
Рейтинг: 0 / 0
Проблема с поиском класса
    #37605487
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А каким образом SomeLoader должен знать о существовании вашего .class файла?
Посмотрите исходники класса ClassLoader и посмотрите URLClassLoader.
Ещё при создании загрузчика скорее всего нужно будет указать родительский загрузчик, если нужно чтобы загруженый класс как-то взаимодействовал с остальным приложением.
...
Рейтинг: 0 / 0
Проблема с поиском класса
    #37605557
Sievs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczА каким образом SomeLoader должен знать о существовании вашего .class файла?
Посмотрите исходники класса ClassLoader и посмотрите URLClassLoader.
Ещё при создании загрузчика скорее всего нужно будет указать родительский загрузчик, если нужно чтобы загруженый класс как-то взаимодействовал с остальным приложением.

С URLClassLoader всё работает.
Спасибо за помощь.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема с поиском класса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]