groovyConsole - Groovy Swing 主控台

1. Groovy:Groovy 主控台

Groovy Swing 主控台允許使用者輸入並執行 Groovy 指令碼。此頁面記錄此使用者介面的功能。

2. 基礎

image

  1. Groovy 主控台透過 groovyConsolegroovyConsole.bat 啟動,兩者都位於 $GROOVY_HOME/bin

  2. 主控台有一個輸入區域和一個輸出區域。

  3. 您在輸入區域中輸入 Groovy 指令碼。

  4. 當您從 動作 選單中選擇 執行 時,主控台會編譯指令碼並執行它。

  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 都是 執行指令碼 的捷徑鍵。

  • 如果您僅在輸入區域中突顯部分文字,Groovy 將僅執行該文字。

  • 腳本的結果是執行之最後一個表達式的值。

  • 您可以從「動作」功能表中選取「擷取 System.out」來開啟和關閉 System.out 擷取。

3.3. 編輯檔案

您可以開啟任何文字檔案,編輯它,執行它(作為 Groovy 腳本),然後在完成後再次儲存它。

  • 選取「檔案 > 開啟」(快速鍵「ctrl+O」)以開啟檔案

  • 選取「檔案 > 儲存」(快速鍵「ctrl+S」)以儲存檔案

  • 選取「檔案 > 新檔案」(快速鍵「ctrl+Q」)以空白輸入區域重新開始

3.4. 歷程和結果

  • 您可以從「動作」功能表中選取「檢查最後一個」以在最後一個(非空值)結果上彈出 gui 檢查器。檢查器是檢視清單和對應的便利方式。

  • 主控台會記住最後十次腳本執行。您可以從「編輯」功能表中選取「下一個」和「上一個」來向前和向後捲動歷程。`Ctrl-N` 和 `ctrl-P` 是便利的快速鍵。

  • 最後一個(非空值)結果會繫結到名為 `_`(底線)的變數。

  • 歷程中每次執行的最後一個結果(空值和非空值)會繫結到名為 ``(兩個底線)的清單變數。最後一次執行的結果為 [-1],倒數第二次執行的結果為 __[-2],依此類推。

3.5. 中斷腳本

Groovy 主控台是開發腳本的非常便利的工具。您經常會發現自己會執行腳本多次,直到它以您想要的方式執行為止。但是,如果您的程式碼花費太長時間才能完成,或者更糟的是,建立了一個無限迴圈怎麼辦?中斷腳本執行可以透過在腳本執行時彈出的對話方塊上按一下「中斷」按鈕,或透過工具列中的「中斷」圖示來達成。

Toolbar

但是,這可能不足以中斷腳本:按一下按鈕將中斷執行緒,但如果您的程式碼沒有處理中斷旗標,腳本很可能會繼續執行,而您無法有效地停止它。為避免這種情況,您必須確保「腳本 > 允許中斷」功能表項目已標示。這將自動對您的腳本套用 AST 轉換,它將負責檢查中斷旗標(`@ThreadInterrupt`)。這樣,即使您沒有明確處理中斷,您也可以保證腳本可以中斷,但代價是額外的執行時間。

3.6. 更多

  • 您可以從「動作功能表」中選取「較小字體」或「較大字體」來變更字體大小。

  • 由於 `groovy.ui.ConsoleApplet`,主控台可以作為 Applet 執行。

  • 按下 Enter 時,程式碼會自動縮排

  • 你可以將 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 主控台允許你這麼做。首先,你必須確保已勾選視覺化選項:檢視 → 視覺化程式碼結果 — 記錄下來,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 主控台會在啟動時執行該程式碼,並將轉換清單注入程式碼的繫結中,以便你可以新增自己的程式碼結果表示。在我們的案例中,我們將 Map 轉換為美觀的 Swing JTable。我們現在可以友善且美觀地視覺化地圖,如下面的螢幕截圖所示

image

6. 進階除錯:AST 瀏覽器

Groovy 主控台可以視覺化表示目前編輯程式碼的 AST(抽象語法樹),如下面的螢幕截圖所示。當你想要了解 AST 轉換如何運作時,這會很有用,如果你正在開發自己的 AST 轉換,這會特別方便。在下面的範例中,我們已使用 @Immutable 註解註解我們的類別,而 Groovy 編譯器已為我們產生許多樣板程式碼。我們可以在「來源」標籤中,看到已產生 equals 方法的程式碼。

AST Browser

我們甚至可以檢查編譯器產生的 JVM 位元組碼。在下面的圖片中,我們正在查看 Groovy 表達式 LocalDate.parse('2020/02/10', 'yyyy/MM/dd') 的位元組碼。

AST Browser

7. 進階除錯:CST 瀏覽器

Groovy 主控台可以視覺化表示程式碼的初始剖析的 CST(具體語法樹)。這主要對剖析大師有用。

CST Browser