我试图测试BeanShell的命令行解释器如何在我的机器上处理基本的Java命令和语法,看看我是否可以以任何方式自定义其行为。我在运行OS X 10.10.1的计算机上安装了2.0b4版本(根据说明,JAR文件位于/Library/Java/Extensions
中。)
它与我一直在寻找的最接近的东西,一个交互式Java解释器,但它没有一些好的翻译应该具备的标准功能。
我希望能够使用向上箭头键重复使用上一个命令,但目前它还没有识别它,它只显示一个控制序列。有没有办法为BeanShell定制这个?
有没有办法让BeanShell打印出变量的值,如果我事先已经创建它,只需命名它,比如
String s = new String(" Hello World!"); S; Hello World!。
例如,这可以在Python中实现。
根据有关导入Java类的文档which(<java class>);
应该返回指定Java类的类路径位置。但which( java.lang.String );
对我不起作用,我得到NullPointerException
:
bsh%which(java.lang.String);
启动ClassPath映射
映射:目录/用户/ srm
//错误://未捕获异常:方法调用cp.getClassSource:at Line:42:in file:/bsh/commands/which.bsh:cp .getClassSource(className)
从方法调用:其中:at line:8:in file :::which(java .lang .String) 目标异常:java.lang.NullPointerException
显示java.lang.NullPointerException
任何指示或帮助都将不胜感激。
答案 0 :(得分:1)
从http://jline.sourceforge.net/index.html下载jline jar,然后你就可以:
java -cp jline-1.0.jar:bsh-2.0b4.jar jline.ConsoleRunner bsh.Interpreter
jline将提供行编辑功能。我发现了这个提示here。
jline2正在运行问题。首先,你会得到:
$ java -cp jline-2.12.jar:bsh-2.0b4.jar jline.ConsoleRunner bsh.Interpreter
Exception in thread "main" java.lang.NoClassDefFoundError: jline/ConsoleRunner
由于this问题已修复。但是,然后,使用新课程,你仍然得到:
$ java -cp jline-2.12.jar:bsh-2.0b4.jar jline.console.internal.ConsoleRunner bsh.Interpreter
Exception in thread "main" java.lang.IllegalArgumentException: wrong number of arguments
由于this问题尚未修复。
bsh % show(); bsh % String s = new String("Hello World"); bsh % s; <Hello World> bsh %
在文档的 Useful BeanShell Commands 部分中提到了它。
在我的情况下它并没有失败,但它也没有找到它。
bsh % which(java.lang.String); Start ClassPath Mapping Mapping: Archive: file:/Users/me/beanshell/jline-1.0.jar Mapping: Archive: file:/Users/me/beanshell/bsh-2.0b4.jar Mapping: Archive: file:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar End ClassPath Mapping null bsh %