документация по BeanShell довольно хороша в этой области, так что вам следует сначала прочитать ее. . В вашем случае проблем немного. Тем не менее, существуют заскриптованные объекты. Кроме того, файл .bsh, с которого вы начинаете, должен выполнять объект сценария. Взяв ваш пример, этот код должен работать:
Hello() {
run(){
print("Hello World");
}
return this;
}
myHello = Hello();
myHello.run(); // Hello World
*ОБНОВЛЕННЫЙ ответ для версии BeanShell 2.0b1 и более поздних версий, поддерживающих классы со сценариями *:
Я создал два файла beanshell и поместил их в каталог «scripts».
Я полагаю, что первый «executor.bsh» — это то, что вы называете «родительским» сценарием.
// executor.bsh
addClassPath(".");
importCommands("scripts");
source(); // This runs the script which defines the class(es)
x = new HelloWorld();
x.start();
Второй файл содержит сценарий класса. Обратите внимание, что я использую скриптовую команду и, согласно документации BeanShell, имя файла должно совпадать с именем команды.
// source.bsh
source() {
public class HelloWorld extends Thread {
count = 5;
public void run() {
for(i=0; i<count; i++)
print("Hello World!");
}
}
}
Я вызвал executor.bsh в классе java с помощью:
Interpreter i = new Interpreter();
i.source("scripts/executor.bsh");
// Object val = null;
// val = i.source("scripts/executor.bsh");
// System.out.println("Class:" + val.getClass().getCanonicalName());
// Method m = val.getClass().getMethod("start", null);
// m.invoke(val, null);
Обратите внимание, что я оставил некоторый код с комментариями, который также показывает, как я выполняю скриптовый класс из Java с использованием Reflection. И это результат:
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
person
GaryMcM
schedule
08.01.2013