2009-12-09 56 views
1

我有啓動(使用的ProcessBuilder)另一個Java應用軟件這樣的Java應用程序:顯示啓動的Java應用程序的控制檯的Java ProcessBuilder?

String val = "something"; 
ProcessBuilder processBuilder = new ProcessBuilder("java", "-classpath", dir, appName, val); 
Process p = processBuilder.start(); 

現在,這工作得很好,APPNAME與參數val推出,它運行和工程...偉大的..問題是沒有控制檯窗口出現... appName很多輸出到控制檯,我們需要看到它...我怎樣才能啓動與控制檯的過程?

我想這樣的東西( 「的CMD.exe」, 「Java」 的, 「-classpath」,目錄,應用程序的名字,VAL),等等......但我無法得到它的權利......

另外,我不能重定向流,我的程序實際上可以啓動這些appName的5-10,每個應該有自己的控制檯窗口顯示自己的信息。

任何幫助將不勝感激。 謝謝,

+0

你看到一個javaw.exe進程在任務管理器運行後,我們是把這個代碼? – djangofan 2011-06-21 20:41:09

回答

0

控制檯窗口通常不是最可靠的日誌形式。它們只存儲一定量的信息(緩衝區),並且可以在不同平臺之間表現不同。

我強烈建議使用類似log4j的文件記錄到文件,如果您需要實時查看,請使用tail like program(我看到您使用的是Windows)。

除此之外,您可以隨時查看窗口併爲每個日誌啓動尾部程序,這可能令人討厭,我會在java swing中編寫自己的日誌窗口。

的基本思路是不要太依賴操作系統。

0

試過Runtime.getRuntime().exec("cscript java -classpath ...");

無論如何,考慮使用日誌框架(log4j,commons-logging),因爲打開5個控制檯並不是最聰明的事情。

-1

問題是 - 我需要保留這些正在運行的進程的列表 - 在像表中一樣,使用ProcessBuilder允許我保留它的句柄...使用RunTime.getRuntime.exe並不實際返回任何內容可以保持...

這樣以後,如果需要的話,我可以殺死它....

+0

我建議你保持所有「內部」,即在Java中。爲什麼你需要多個流程?爲什麼不使用多個線程。 ps:你應該評論你的問題,或編輯你的問題以增加更多信息。 – pstanton 2009-12-09 23:05:16

0

我通過過程調用一些shell腳本來打開命令行窗口,並推出任何我所需要的。只要腳本不分離 - 通常可以停止執行任何shell命令--java仍將保留正在運行的進程。

我在linux中做過,但概念應該類似。

#!/bin/bash 
# To open a process in a new window. 
gnome-terminal -x ./your-real-shell-script-here.sh "[email protected]" 

真正的腳本將有你的Java執行它,如:

#!/bin/bash 
java -jar your-jar-file.jar "[email protected]" 

我認爲你可以使用javaw進程在Windows上運行,所以你可能只需要一個shell腳本。

0

控制檯對象僅在從控制檯執行java ....時才存在。否則,獲取一個的調用返回null。

如果你想看到一個控制檯,你需要打開命令行控制檯(如Windows的cmd.exe或Unix的bash shell窗口)和類型:

java -classpath="..." com.example.appName arg1 

如果你想在不同的運行方式,很遺憾地說,登錄到控制檯不適合你。相反,使用日誌之一:

  • log4j的
  • SLF4J
  • 的logback
相關問題