groovyConsole - Groovy Swing 主控台
1. Groovy:Groovy 主控台
Groovy Swing 主控台允許使用者輸入並執行 Groovy 指令碼。此頁面記錄此使用者介面的功能。
2. 基礎
-
Groovy 主控台透過
groovyConsole
或groovyConsole.bat
啟動,兩者都位於$GROOVY_HOME/bin
-
主控台有一個輸入區域和一個輸出區域。
-
您在輸入區域中輸入 Groovy 指令碼。
-
當您從
動作
選單中選擇執行
時,主控台會編譯指令碼並執行它。 -
任何通常會印在
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
都是執行指令碼
的捷徑鍵。 -
如果您僅在輸入區域中突顯部分文字,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 主控台是開發腳本的非常便利的工具。您經常會發現自己會執行腳本多次,直到它以您想要的方式執行為止。但是,如果您的程式碼花費太長時間才能完成,或者更糟的是,建立了一個無限迴圈怎麼辦?中斷腳本執行可以透過在腳本執行時彈出的對話方塊上按一下「中斷」按鈕,或透過工具列中的「中斷」圖示來達成。
但是,這可能不足以中斷腳本:按一下按鈕將中斷執行緒,但如果您的程式碼沒有處理中斷旗標,腳本很可能會繼續執行,而您無法有效地停止它。為避免這種情況,您必須確保「腳本 > 允許中斷」功能表項目已標示。這將自動對您的腳本套用 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. 視覺化程式碼輸出結果
你可以自訂程式碼輸出結果的視覺化方式。讓我們看看如何自訂。例如,檢視地圖結果會顯示類似以下內容
你在此看到的,是 Map 的一般文字表示。但是,如果我們啟用特定結果的自訂視覺化,會如何?Swing 主控台允許你這麼做。首先,你必須確保已勾選視覺化選項:檢視 → 視覺化程式碼結果
— 記錄下來,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 主控台會在啟動時執行該程式碼,並將轉換清單注入程式碼的繫結中,以便你可以新增自己的程式碼結果表示。在我們的案例中,我們將 Map 轉換為美觀的 Swing JTable。我們現在可以友善且美觀地視覺化地圖,如下面的螢幕截圖所示
6. 進階除錯:AST 瀏覽器
Groovy 主控台可以視覺化表示目前編輯程式碼的 AST(抽象語法樹),如下面的螢幕截圖所示。當你想要了解 AST 轉換如何運作時,這會很有用,如果你正在開發自己的 AST 轉換,這會特別方便。在下面的範例中,我們已使用 @Immutable
註解註解我們的類別,而 Groovy 編譯器已為我們產生許多樣板程式碼。我們可以在「來源」標籤中,看到已產生 equals 方法的程式碼。
我們甚至可以檢查編譯器產生的 JVM 位元組碼。在下面的圖片中,我們正在查看 Groovy 表達式 LocalDate.parse('2020/02/10', 'yyyy/MM/dd')
的位元組碼。
7. 進階除錯:CST 瀏覽器
Groovy 主控台可以視覺化表示程式碼的初始剖析的 CST(具體語法樹)。這主要對剖析大師有用。