我正在使用beanshell bsh-2.0b4.jar文件。我有构建路径并在java程序中使用它。我已设法从控制台获取打印语句。但是如果返回一个值,那么如何获得返回值。
import java.io.*;
import bsh.Interpreter;
import bsh.EvalError;
public class CaptureDis {
/**
* @param args
*/
public static void main(String[] args) {
Interpreter i = new Interpreter();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps2 = System.out;
try {
//i.eval(System.out.println("System.out.println(\"test\");"));
i.eval("int x=2; int y=3; int res=x+y; return res");
i.getOut();
} catch (EvalError e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String out = baos.toString();
System.setOut(ps2);
System.out.println(out);
}
}
答案 0 :(得分:1)
我没有测试你的脚本,但我怀疑你错过了HashSet的import语句。实际上,您不需要脚本中的HashSet声明。由于您在调用之前设置了'hs',因此解释器已知。您的脚本应如下所示:
srcCode = "for(i=0;i<10;i+=2){ hs.add(i); }";
请注意,在提到您的第一个问题时,如果您在调用之前不设置'hs',则需要显式返回它,因为最后一个计算表达式(hs.add(i))返回一个布尔值。但是,由于您传递的是对“hs”的引用,因此根本不需要返回它。
答案 1 :(得分:0)
eval方法返回'res'。实际上,您也可以省略脚本中的return语句,因为beanshell默认返回上次计算的表达式
Integer answer = (Integer) i.eval("int x=2; int y=3; int res=x+y; return res");