2009-07-29 49 views
4

我在Java中編寫了一個命令行應用程序,並希望爲此使用新的類java.io.Console。我使用System.console()來獲得這個類的一個實例。這個調用返回一個工作控制檯,如果我通過'java -jar MyApp.jar'調用我的應用程序,但是如果我通過ant的java任務執行應用程序,則不會設置。叉是真實的,spwan虛假的這個電話。爲什麼這種差異(System.out.print()在ant下工作正常)?如果我通過ant啓動我的應用程序,我怎樣才能使用控制檯?爲什麼System.console()在使用java執行時設置,如果通過ant執行則設置爲unset?

+2

我注意到在Emacs中啓動這種程序時遇到同樣的問題。 – 2009-07-29 12:52:19

回答

7

this method狀態的Javadoc:

返回與當前Java虛擬機相關聯的唯一Console對象(如果有)。

而對於System.Console類狀態下的文檔:

無論是虛擬機具有控制檯取決於底層平臺,也取決於在其中虛擬機被調用的方式。如果虛擬機從交互式命令行啓動而不重定向標準輸入和輸出流,則其控制檯將存在,並且通常會連接到啓動虛擬機的鍵盤和顯示器。如果虛擬機是自動啓動的,例如通過後臺作業調度程序,那麼它通常沒有控制檯。

我會想象,當Ant派生一個新的Java進程時,它會重定向標準輸出。

+0

那麼在哪種情況下`System.Console`實際上是有用的?我不能指望用戶永遠不會重定向流。 – 2009-07-29 12:56:49

2

如果輸入或輸出被重定向,System.console()返回 null。螞蟻就是這麼做的。

1

那麼,螞蟻是一個構建自動化工具。通常,交互式應用程序在構建自動化中幾乎沒有任何地方,所以當通過ant運行任務時,您不會得到控制檯。

0

它看起來像螞蟻Java任務是使用javaw.exe而不是java.exe。 javaw沒有連接到它的控制檯。

相關問題