| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Использование загенерированного .java Class |
| Автор: LeonLG 18.6.2007, 11:40 | ||
| Всем привет... и сразу к вопросу Мои Quellcode
В этом классе я зачитываю .txt File и позже генерирую .java File. BanditBonus.java создается (когда делаю refresh "F5"). Но то что стоит в BanditBonus.java не выдается у меня на консоле. Мой .txt File: package replication; public class BanditBonus { public BanditBonus(){ System.out.println("Generated successful"); } } Что также и записывается в .java Class ("BanditBonus.java"). Возможно ли вообще в этом случае использовать загенерированный "BanditBonus.java" Class или есть какая то другая альтернатива Спасибо заранее... |
| Автор: LeonLG 18.6.2007, 12:24 |
| Как я понял... без создания нового объекта от класса BanditBonus.java, вадачи на консоле не получится А объект от класса BanditBonus создать не могу, т.к. класс будет загенерирован после компилирования |
| Автор: LSD 18.6.2007, 21:00 |
| Что-то я нифига не понял смысл самой программы, она просто копирует файл из одного места в другое и все. Что вообще ты пытаешься сделать? |
| Автор: RebornCrusader 19.6.2007, 01:02 |
| У меня такое чувство, что речь идёт о выполнении сгенерированного кода на лету? |
| Автор: LeonLG 19.6.2007, 10:31 | ||||
Как "RebornCrusader" сказал
Мне просто надо создать после компилирования новый файл, который я смог бы позже использовать. Класс который я выложил, это у меня просто тестовый. Из которо я позже смогу исходить. В классе "GenerateBanditClass" я просто копирую содержание .txt файла, и создаю новый класс "BanditBonus.java":
Который мне должен выдать на консоле: Generated successful Чего не делает Может это можно сделать както по другому?! |
| Автор: math64 19.6.2007, 11:59 |
| После того как создан файл .java, нужно запустить компилятор, поместить .class файл в ClassPath и вызвать Class.forName().newInstance(). |
| Автор: LeonLG 19.6.2007, 12:19 | ||
А без компилирования возможно это сделать? Т.е. после того как создан файл .java (при стартовом компилировании), я мог бы сразу использовать загенерированныи код (без повторного компилирования). |
| Автор: Metal_Heart 19.6.2007, 12:28 |
| LeonLG, java-файл - это ТЕКСТ!!! class-файл - уже откомпилированный и исполняемый!!! Добавлено @ 12:31 перенос текста из файла типа txt в файл типа java (или какой-нибудь другой) ничего не изменит. Тебе обязательно надо будет откомпилировать твой новый файл, а вобщем пробуй, как советовал math64 Компилировать код "на лету" идея интересная, но вот вопрос, а что если исходник с синтаксической ошибкой? Тебе ведь придется парсить ответ компилятора ... |
| Автор: LeonLG 19.6.2007, 13:28 |
| "Metal_Heart"... Спасибо за ответ Думаю решить свою проблему с помощью "ClassLoader" |
| Автор: Metal_Heart 19.6.2007, 13:41 |
| LeonLG, только учти, что в данном случае тебе придеться забыть об исходнике, потому как ClassLoader подгружает откомпилированный class-файл |
| Автор: LSD 19.6.2007, 14:16 |
| Делаешь так: - берешь файл tools.jar и кладешь его в CLASSPATH твоей программы ( - создаешь файл с исходником - компилируешь его с помощью класса com.sun.tools.javac.Main, вызываешь у него метод main(), аргументы теже что и у стандартного javac - создаешь новый ClassLoader и загружаешь с его помощью твой класс - через рефлексию вызываешь нужные методы |
| Автор: LeonLG 21.6.2007, 00:12 | ||
попробую сделать через "extends", т.е. загенерированный .java класс наследует методы и переменные от исходникa...надюсь что пойдет Ещё один вопрос: Возможно ли мне удалить, по окончании программы, свои загенерированный класс. T.e. чтобы он при каждом компилировании заново генерировался и удалялся? |
| Автор: Metal_Heart 21.6.2007, 08:51 |
| LeonLG, если ты имеешь доступ к файловой системе и соответствующие права, то всё в твоих руках |
| Автор: fixxer 21.6.2007, 10:19 |
| Подозреваю что в этом случае проще всего использовать Script Engine, например BeanShell |
| Автор: RebornCrusader 22.6.2007, 01:30 |
| Я для себя выбрал Janino. Вообще эта тема поднималась в форуме неоднократно. Имеет смысл, думаю, собрать все решения (хотя бы ссылки и названия, без подробного описания) и выложить в какой-нибудь FAQ. |
| Автор: LeonLG 23.6.2007, 14:06 | ||||||
Чегото не могу понять.. как мне создать новый Объект вот этого класса
Main Класс (если делаю вот так то идет..)
Как вызвать класс "GenerateBanditClass " (в Main классе ) по другому (или изменить класс "GenerateBanditClass" ), так чтобы main класс был без "throws Exception" ? T.е. вот так:
|
| Автор: LeonLG 23.6.2007, 14:35 | ||
Thanks LCD... зделал вот так:
|