的BeanShell documentation在這方面還不錯,所以你應該通過先讀。在你的情況下,幾乎沒有問題。也就是說,有腳本對象。另外,您開始的.bsh文件需要執行腳本對象。以你的例子此代碼應工作:
Hello() {
run(){
print("Hello World");
}
return this;
}
myHello = Hello();
myHello.run(); // Hello World
* 更新的版本的BeanShell 2.0b1的答案,後來支持腳本類*:
我創建了兩個BeanShell的文件,並將它們放置在一個目錄下的「腳本」。
我相信第一個「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!");
}
}
}
我在一個Java類調用executor.bsh有:
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腳本類,使用反射。這是結果:
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
對不起,但你誤解了我的問題,這個類你好在分離的bsh文件中,我用「Interpreter」調用它。 – PotOfTea
嗯。我希望你把我在HelloW.bsh中給出的代碼放在你的問題中。如果你這樣做,它將實例化腳本對象並調用run方法。你給Interpreter的文件必須是某種腳本並執行一個動作。調用'source()'方法與調用'eval()'相同,除了腳本來自文件而不是字符串。 – GaryMcM
好的謝謝我明白了,我認爲沒有辦法在父級bsh文件中運行方法或實例化類(基本上導入帶有類的文件)? – PotOfTea