執行我有這個簡單的Java程序:`System.console()``返回如果null`從'gradle這個run`
package me.fornever.javaterminal;
public class Main {
public static void main(String[] args) {
System.out.println("Console: " + System.console());
}
}
而這個簡單的build.gradle
:
apply plugin: 'java'
apply plugin: 'application'
mainClassName = 'me.fornever.javaterminal.Main'
當我中號使用gradle --no-daemon run
執行它,我得到以下輸出:
Console: null
如果我通過從終端執行它,我得到如下:
Console: [email protected]
我知道System.console()
可能返回null
當父進程使用標準輸出重定向。是否有一些Gradle選項可禁用重定向並使控制檯完全可用於我的程序?
我開發一個Java的終端庫,所以我想運行我的測試和可執行文件沒有標準輸入/輸出/標準錯誤搖籃干預。
請注意,System.console()
是null
不是唯一的問題,但最明顯的一個。在現實中,我想從gradle run
執行的程序訪問WinAPI的WriteConsoleW
功能,我無法使用此功能,由於同樣的原因被System.console()
null
。所以我真的需要禁用Gradle中的輸出重定向,如果此選項可用。
也請注意,這個問題是來自Gradle build null console object不同,因爲這個問題問如何使用System.console()
一個搖籃腳本的內部,而不是由gradle run
調用Java程序;我相信他們在這方面的工作方式不同,因爲這兩個答案都不適用於我的案例。
您如何測試*使用'console()'的程序?你無法發送測試輸入,也無法驗證輸出,那麼你在測試什麼? – Andreas
@Andreas首先我測試它是否可以工作,而不是拋出任何異常。第二種選擇是使用一些與平臺相關的API,比如win32'ReadConsoleOutput'或包裝器,比如'winpty'。我正在爲Windows控制檯編寫包裝庫,因此可以使用平臺相關解決方案。 – ForNeVeR
所以當你做一個網頁搜索時,你發現了什麼?你有沒有發現這個重複的問題? – Andreas