Вопросы о (обновлении) .class файлах - PullRequest
1 голос
/ 08 февраля 2011

Так что у меня возникли проблемы с обновлением затмения.Я не уверен, является ли это проблемой Java или Eclipse.

Я пытаюсь создать файл .java, а затем я пытаюсь создать экземпляр объекта этого типа и запустить определенныйметод, который я определил в этом классе.

Код, который я использую для создания исходного файла класса classname и запуска метода method:

Class cl = Class.forName(classname);
java.lang.reflect.Constructor co = cl.getConstructor();
cl.getMethod(method).invoke(co.newInstance());

Когда я создаю файл .java («динамический» класс / код), мой код создает исключение ClassNotFoundException.Если я щелкну правой кнопкой мыши по своему проекту и нажму «Обновить», появится .java, будет создан .class, и мой код работает нормально.Очевидно, это проблема, потому что я пытаюсь сделать все это за один раз, и, очевидно, необходимость обновить пакет моего проекта - проблема.

Как-нибудь обойти это?

Ответы [ 4 ]

1 голос
/ 08 февраля 2011

Вам необходимо (по крайней мере, концептуально) отделить среду выполнения от среды сборки.Если цель вашей программы - создать исходный файл Java, скомпилировать его, а затем использовать все это в одной и той же среде выполнения, вам нужно найти способ сделать это программно, отделенным от Eclipse.Если ваша цель - всегда запускать вашу программу в сочетании с Eclipse, вам лучше создать плагин Eclipse.

Чтобы сделать все это за одну среду выполнения Java, вам необходимо использоватьинструменты JDK для вызова компилятора и затем используют пользовательский загрузчик классов для загрузки результата.

0 голосов
/ 08 февраля 2011

Вам стоит взглянуть на проект Codehaus JANINO.http://docs.codehaus.org/display/JANINO/Home

Я использовал его раньше в проекте с большим количеством динамически генерируемых и зарегистрированных классов.

Вот часть выдержки с сайта проекта.

Janino - супер-маленький, супер-быстрый компилятор Java ™.Он не только может скомпилировать набор исходных файлов в набор файлов классов, таких как инструмент JAVAC, но также может скомпилировать выражение Java, блок, тело класса или исходный файл в памяти, загрузить байт-код и выполнить его непосредственно вта же JVM.

0 голосов
/ 08 февраля 2011

В среде Eclipse, когда вы вносите изменения, а среда IDE не принимает и не распознает их, вы должны выполнить обновление, а также перейти к «Проект» -> «Очистить и очистить этот проект и все, от чего он зависит».Уборка часто и обычно устраняет проблемы.

0 голосов
/ 08 февраля 2011

Если вы создаете файл Java на лету, вам, вероятно, потребуется сначала вызвать команду javac для его компиляции, прежде чем вы сможете выполнить свой код.Вы можете программно вызвать команду javac, используя Runtime.exec (..) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...