我一直试图在谷歌中搜索很长一段时间,但没有取得任何成功。我希望在这里解决我的问题。
第一功能: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类中时,它似乎内存不足,至少这是我认为的情况) –