[英]How does Eclipse capture stdout from a process started with javaw.exe?
假設您正在Eclipse中運行一個簡單的HelloWorld程序。 System.out.println("Hello, World!");
的輸出System.out.println("Hello, World!");
在“控制台”選項卡中清晰可見。 但是,如果您隨后打開“調試”透視圖並顯示“進程屬性”窗口,則會看到類似以下內容:
Path:
C:\Program Files\Java\jdk1.8.0_144\bin\javaw.exe
Working Directory:
C:\eclipse-workspace\HelloWorld
Command Line:
"C:\Program Files\Java\jdk1.8.0_144\bin\javaw.exe"
-Dfile.encoding=Cp1250
-classpath "<blah-blah>"
HelloWorld
因此,似乎正在使用javaw.exe啟動JVM。 但是,如果從命令行運行完全相同的命令,則不會看到任何輸出(正如您所期望的那樣,因為應該將javaw與stdout和stderr分離)。
那么,Eclipse如何捕獲並顯示該輸出? 我希望能夠做到同樣...
創建自己的PrintStream並使用System.setOut(PrintStream out)方法。
public class RedirectSystemOut {
public static void main(String[] args) throws FileNotFoundException {
System.out.println("This goes to the console");
PrintStream console = System.out;
File file = new File("out.txt");
FileOutputStream fos = new FileOutputStream(file);
PrintStream ps = new PrintStream(fos);
System.setOut(ps);
System.out.println("This goes to out.txt");
System.setOut(console);
System.out.println("This also goes to the console");
}
}
要重定向Java中外部過程的輸出流,可以使用ProcessBuilder類。
用法示例
public class Main {
public static void main(String[] args) throws Exception {
ProcessBuilder pb = new ProcessBuilder("javaw", "-version")
.inheritIO();
Process p = pb.start();
int returnValue = p.waitFor();
System.out.println(returnValue);
}
}
示例輸出
java version "1.8.0_144" Java(TM) SE Runtime Environment (build 1.8.0_144-b01) Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode) 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.