groovyConsole - Groovy Swing 控制台

1. Groovy:Groovy 控制台

Groovy Swing 控制台允许用户输入和运行 Groovy 脚本。本页介绍此用户界面的功能。

2. 基础知识

image

  1. Groovy 控制台通过 groovyConsolegroovyConsole.bat 启动,两者都位于 $GROOVY_HOME/bin 中。

  2. 控制台有一个输入区和一个输出区。

  3. 您在输入区输入 Groovy 脚本。

  4. 当您从 Actions 菜单中选择 Run 时,控制台会编译并运行脚本。

  5. 任何通常会打印到 System.out 的内容都会打印在输出区。

  6. 如果脚本返回非空结果,则会打印该结果。

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+EnterCtrl+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 菜单中选择 NextPrevious 来前后滚动历史记录。Ctrl-Nctrl-P 是便捷的快捷键。

  • 最后一个(非空)结果绑定到一个名为 _(下划线)的变量。

  • 历史记录中每次运行的最后一个结果(空和非空)都绑定到一个名为 __(两个下划线)的列表变量中。最后一次运行的结果是 __[-1],倒数第二次运行的结果是 __[-2],依此类推。

3.5. 中断脚本

Groovy 控制台是开发脚本的非常方便的工具。通常,您会发现自己多次运行脚本,直到它按您希望的方式工作。但是,如果您的代码需要很长时间才能完成,或者更糟的是,创建了一个无限循环怎么办?可以通过单击脚本执行时弹出的小对话框上的 interrupt 按钮或通过工具栏中的 interrupt 图标来中断脚本执行。

Toolbar

但是,这可能不足以中断脚本:单击按钮会中断执行线程,但如果您的代码不处理中断标志,脚本可能会继续运行而您无法有效地停止它。为了避免这种情况,您必须确保 Script > Allow interruption 菜单项被标记。这将自动将 AST 转换应用于您的脚本,该转换将负责检查中断标志 (@ThreadInterrupt)。这样,即使您不显式处理中断,也能保证脚本可以被中断,代价是额外的执行时间。

3.6. 更多功能

  • 您可以通过从 Actions menu 中选择 Smaller FontLarger 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. 可视化脚本输出结果

您可以自定义脚本输出结果的可视化方式。让我们看看如何自定义它。例如,查看地图结果会显示如下内容:

image

您在这里看到的是 Map 的常用文本表示。但是,如果我们启用了某些结果的自定义可视化呢?Swing 控制台允许您做到这一点。首先,您必须确保可视化选项已勾选:View → Visualize Script Results — 值得一提的是,Groovy 控制台的所有设置都通过 Preference API 存储和记住。内置了一些结果可视化:如果脚本返回 java.awt.Imagejavax.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。我们现在能够以友好和吸引人的方式可视化地图,如下图所示:

image

6. 高级调试:AST 浏览器

Groovy 控制台可以可视化表示当前编辑脚本的 AST(抽象语法树),如下图所示。当您想了解 AST 转换的工作原理时,这非常有用,如果您正在开发自己的 AST 转换,则特别方便。在下面的示例中,我们用 @Immutable 注解标记了我们的类,Groovy 编译器为我们生成了许多样板代码。我们可以在 Source 选项卡中看到生成的 equals 方法的代码。

AST Browser

我们甚至可以检查编译器生成的 JVM 字节码。在下图中,我们正在查看 Groovy 表达式 LocalDate.parse('2020/02/10', 'yyyy/MM/dd') 的字节码。

AST Browser

7. 高级调试:CST 浏览器

Groovy 控制台可以可视化表示脚本初始解析的 CST(具体语法树)。这主要对解析专家有用。

CST Browser