我一直試圖在谷歌中搜索很長一段時間,但沒有取得任何成功。我希望在這裏解決我的問題。
第一功能:Java進程在進程中間停止
public void startTFServer(Channel c) {
try {
ProcessBuilder procBuilder = new ProcessBuilder("tfs.exe");
procBuilder.redirectErrorStream();
Process proc = null;
System.out.println(Runtime.getRuntime().freeMemory());
proc = procBuilder.start();
System.out.println(Runtime.getRuntime().freeMemory());
StreamGobbler gobbler = new StreamGobbler(proc.getInputStream(), "STD_OUT");
gobbler.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
捕獲過程輸出的線程:
private class StreamGobbler extends Thread {
InputStream is;
String type;
private StreamGobbler(InputStream is, String type) {
this.is = is;
this.type = type;
}
@Override
public void run() {
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(type + "> " + line);
}
}
catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
問題: 當運行輸入中斷在同一個地方的每個應用程序時間。我使用「Process class」運行的應用程序是需要相當一些內存才能運行的服務器,難道這是導致進程無法完成加載我的應用程序的原因之一嗎?我在想內存會耗盡,但我無法真正診斷它。
任何幫助將不勝感激!
當你說「中斷」,你是什麼意思是什麼呢?你遇到異常,還是隻是掛起? –
它在哪裏呢?你說它每次都發生在同一個地方 - 哪一行似乎是負責任的? –
中斷髮生在加載某個類型的怪物(正在執行的服務器進程)之後。它只停留在那條線上,而沒有進一步發展。沒有例外(即使在ErrorOutputStream中也沒有)。 (當我在桌面上自己執行它時,應用程序運行得很好,但是當包裝在Java Process類中時,它似乎內存不足,至少這是我認爲的情況) –