Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Как динамически выполнить строку кода ?


Автор: KostenkoSergey 5.12.2005, 10:22
Есть строка - фрагмент кода - например
String s1 = "5==3";
или
String s2 = "System.out.println("hello")'"

Возможно ли выполнить её динамически, в процессе работы программы ?
(дебагеры ж это вродь умеют) Как ? smile smile smile

Автор: batigoal 5.12.2005, 10:54
Вот тут есть статейка: http://jdj.sys-con.com/read/36843.htm
Добавлено @ 10:57
Кстати, скомпилировать класс, по-моему, можно не только запуском процесса компилятора, но и с помощью класса java.lang.Compiler.

Автор: chief39 5.12.2005, 11:04
Цитата(KostenkoSergey @ 5.12.2005, 10:22)
(дебагеры ж это вродь умеют)

Дебаггеры, кажись, вставляют свои пять копеек в каждой строчке... и компилят...
Вроде уже обсуждали такое.. не могу найтить....

Всё равно компилить надо эту строку перед выполнением... можешь динамически создавать файл куда набиваешь свой стандартный класс со статик функцией... а в серединку можешь пихать то, что тебе надо выполнить. записал всё в файл - вызвал компилер, запустил сей класс на выполнение
smile

Вопчем подумать надо.....



УПС.... не успел поперед Джорджа smile вроде и добавить нечего smile)

Автор: tux 5.12.2005, 11:09
Проще будет использовать http://www.beanshell.org/.

Автор: KostenkoSergey 5.12.2005, 11:32
Цитата(Lamer @ 5.12.2005, 10:54)
Вот тут есть статейка: Dynamic Code Generation


статейка кажись для SE6 smile


Цитата(tux @ 5.12.2005, 11:09)
Проще будет использовать BeanShell.

cсенки - ща бу смотреть (если есть примерчик скинь сюда, плз)

Автор: tux 5.12.2005, 11:53
HelloWorld будет выглядеть совсем элементарно.
Код

import bsh.Interpreter;

Interpreter i=new Interpreter();
i.eval("System.out.println(\"Hello, world!\")");

Интерпретатору можно задавать имена переменных со значением и получать обратно значения вычисленных переменных. Например, так
Код

Interpreter i=new Interpreter();
i.set("k", 3);
i.set("m", 5);
i.eval("s = k+m");
System.out.println(i.get("s"));

В метод eval кроме строки можно передавать объект java.io.Reader, то есть исполнять можно, например, скрипт из файла.
Пока все smile
Учитывай только что это не совсем полноценная Java, а скорее Java-подобный язык, в котором, тем не менее, доступны любые библиотеки.

Автор: KostenkoSergey 5.12.2005, 12:08
smile супер - мне должно подойти!
Спасибо!
smile

Автор: chief39 5.12.2005, 12:17
tux, Огромное спасибо!
От меня и от KostenkoSergey - плюс в благодарность smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)