groovyConsole - Groovy Swing 控制台
1. Groovy:Groovy 控制台
Groovy Swing 控制台允许用户输入和运行 Groovy 脚本。本页介绍此用户界面的功能。
2. 基础知识
-
Groovy 控制台通过
groovyConsole
或groovyConsole.bat
启动,两者都位于$GROOVY_HOME/bin
中。 -
控制台有一个输入区和一个输出区。
-
您在输入区输入 Groovy 脚本。
-
当您从
Actions
菜单中选择Run
时,控制台会编译并运行脚本。 -
任何通常会打印到
System.out
的内容都会打印在输出区。 -
如果脚本返回非空结果,则会打印该结果。
3. 特性
3.1. 命令行选项和参数
Groovy 控制台支持多种选项来控制类路径和其他功能。
./bin/groovyConsole --help
Usage: groovyConsole [options] [filename]
The Groovy Swing Console allows a user to enter and run Groovy scripts.
--configscript=PARAM A script for tweaking the compiler configuration options
-cp, -classpath, --classpath
Specify where to find the class files - must be first
argument
-D, --define=<name=value> Define a system property
-h, --help Display this help message
-pa, --parameters Generate metadata for reflection on method parameter
names (jdk8+ only)
-pr, --enable-preview Enable preview Java features (jdk12+ only)
-V, --version Display the version
3.2. 运行脚本
您可以使用多种快捷方式来运行脚本或代码片段
-
Ctrl+Enter
和Ctrl+R
都是Run Script
的快捷键。 -
如果您只突出显示输入区域中的部分文本,那么 Groovy 只运行该文本。
-
脚本的结果是执行的最后一个表达式的值。
-
您可以通过从
Actions
菜单中选择Capture System.out
来打开和关闭 System.out 捕获。
3.3. 编辑文件
您可以打开任何文本文件,编辑它,运行它(作为 Groovy 脚本),然后在完成后再次保存它。
-
选择
File > Open
(快捷键ctrl+O
)打开文件 -
选择
File > Save
(快捷键ctrl+S
)保存文件 -
选择
File > New File
(快捷键ctrl+Q
)以空白输入区重新开始
3.4. 历史记录和结果
-
您可以通过从
Actions
菜单中选择Inspect Last
来弹出最后一个(非空)结果的 GUI 检查器。检查器是查看列表和映射的便捷方式。 -
控制台会记住最近十次脚本运行。您可以通过从
Edit
菜单中选择Next
和Previous
来前后滚动历史记录。Ctrl-N
和ctrl-P
是便捷的快捷键。 -
最后一个(非空)结果绑定到一个名为
_
(下划线)的变量。 -
历史记录中每次运行的最后一个结果(空和非空)都绑定到一个名为
__
(两个下划线)的列表变量中。最后一次运行的结果是__[-1]
,倒数第二次运行的结果是__[-2]
,依此类推。
3.5. 中断脚本
Groovy 控制台是开发脚本的非常方便的工具。通常,您会发现自己多次运行脚本,直到它按您希望的方式工作。但是,如果您的代码需要很长时间才能完成,或者更糟的是,创建了一个无限循环怎么办?可以通过单击脚本执行时弹出的小对话框上的 interrupt
按钮或通过工具栏中的 interrupt
图标来中断脚本执行。
但是,这可能不足以中断脚本:单击按钮会中断执行线程,但如果您的代码不处理中断标志,脚本可能会继续运行而您无法有效地停止它。为了避免这种情况,您必须确保 Script > Allow interruption
菜单项被标记。这将自动将 AST 转换应用于您的脚本,该转换将负责检查中断标志 (@ThreadInterrupt
)。这样,即使您不显式处理中断,也能保证脚本可以被中断,代价是额外的执行时间。
3.6. 更多功能
-
您可以通过从
Actions menu
中选择Smaller Font
或Larger Font
来更改字体大小。 -
由于
groovy.ui.ConsoleApplet
,控制台可以作为 Applet 运行。 -
当您按下回车键时,代码会自动缩进。
-
您可以将 Groovy 脚本拖放到文本区域以打开文件。
-
您可以通过从
Script
菜单向类路径添加新的 JAR 或目录来修改控制台中运行脚本的类路径。 -
当预期出现编译错误或抛出异常时,输出区域会显示错误超链接。
4. 嵌入控制台
要在您的应用程序中嵌入 Swing 控制台,只需创建 Console 对象,加载一些变量,然后启动它。控制台可以嵌入到 Java 或 Groovy 代码中。Java 代码如下:
import groovy.ui.Console;
...
Console console = new Console();
console.setVariable("var1", getValueOfVar1());
console.setVariable("var2", getValueOfVar2());
console.run();
...
控制台启动后,您可以在 Groovy 代码中使用变量值。
5. 可视化脚本输出结果
您可以自定义脚本输出结果的可视化方式。让我们看看如何自定义它。例如,查看地图结果会显示如下内容:
您在这里看到的是 Map 的常用文本表示。但是,如果我们启用了某些结果的自定义可视化呢?Swing 控制台允许您做到这一点。首先,您必须确保可视化选项已勾选:View → Visualize Script Results
— 值得一提的是,Groovy 控制台的所有设置都通过 Preference API 存储和记住。内置了一些结果可视化:如果脚本返回 java.awt.Image
、javax.swing.Icon
或没有父级的 java.awt.Component
,则显示对象而不是其 toString()
表示。否则,所有其他内容仍然只是以文本形式表示。现在,在 ~/.groovy/OutputTransforms.groovy
中创建以下 Groovy 脚本:
import javax.swing.*
transforms << { result ->
if (result instanceof Map) {
def table = new JTable(
result.collect{ k, v ->
[k, v?.inspect()] as Object[]
} as Object[][],
['Key', 'Value'] as Object[])
table.preferredViewportSize = table.preferredSize
return new JScrollPane(table)
}
}
Groovy Swing 控制台将在启动时执行该脚本,在脚本的绑定中注入一个 transforms 列表,以便您可以添加自己的脚本结果表示。在我们的例子中,我们将 Map 转换为一个漂亮美观的 Swing JTable。我们现在能够以友好和吸引人的方式可视化地图,如下图所示:
6. 高级调试:AST 浏览器
Groovy 控制台可以可视化表示当前编辑脚本的 AST(抽象语法树),如下图所示。当您想了解 AST 转换的工作原理时,这非常有用,如果您正在开发自己的 AST 转换,则特别方便。在下面的示例中,我们用 @Immutable
注解标记了我们的类,Groovy 编译器为我们生成了许多样板代码。我们可以在 Source
选项卡中看到生成的 equals 方法的代码。
我们甚至可以检查编译器生成的 JVM 字节码。在下图中,我们正在查看 Groovy 表达式 LocalDate.parse('2020/02/10', 'yyyy/MM/dd')
的字节码。
7. 高级调试:CST 浏览器
Groovy 控制台可以可视化表示脚本初始解析的 CST(具体语法树)。这主要对解析专家有用。