进程中的java进程停止

进程中的java进程停止,java,process,Java,Process,我已经试着用谷歌搜索了很长一段时间,但没有成功。我希望能在这里解决我的问题。 第一个功能: 捕获进程输出的线程: 问题是: 运行应用程序时,输入每次都在同一个位置中断。我使用“Process class”运行的应用程序是一个需要相当多内存才能运行的服务器,这可能是进程无法完成加载我的应用程序的原因之一吗?我原以为记忆会耗尽,但我真的无法诊断 任何帮助都将不胜感激 如果我错了,我想非常抱歉,但我认为您正在耗尽外部进程的输出,而不是等到它完成后才继续阅读。我的意思是,基本上: while ((lin

我已经试着用谷歌搜索了很长一段时间,但没有成功。我希望能在这里解决我的问题。
第一个功能:

捕获进程输出的线程:

问题是: 运行应用程序时,输入每次都在同一个位置中断。我使用“Process class”运行的应用程序是一个需要相当多内存才能运行的服务器,这可能是进程无法完成加载我的应用程序的原因之一吗?我原以为记忆会耗尽,但我真的无法诊断


任何帮助都将不胜感激

如果我错了,我想非常抱歉,但我认为您正在耗尽外部进程的输出,而不是等到它完成后才继续阅读。我的意思是,基本上:

while ((line = br.readLine()) != null) {               
    System.out.println(type + "> " + line);
}

如果进程停止写入输出一秒钟,记录器将停止记录。如果它再次开始写入,您将脱离循环。

我注意到一个问题:

procBuilder.redirectErrorStream();
这不是你想要的。这是一个getter方法,它告诉您redirectErrorStream属性的值。可能是您有错误,并且由于未读取而被阻止。因此,您需要使用setter方法:参见API


当你说“中断”时,你到底是什么意思?你得到一个例外,还是它只是挂起?它在哪里这样做?你说它每次都发生在同一个地方-哪一行似乎负责?中断发生在加载某种类型的怪物(正在执行的服务器进程)之后。它只是停留在那条线上,不再前进。没有给出异常(即使在ErrorOutputStream中也没有)。(当我自己在桌面上执行应用程序时,它运行得很好,但当围绕Java Process类运行时,它似乎内存不足,至少我认为是这样)如果不从Java启动它,tfs.exe会正确执行?它执行得很好,问题是它中途停止。我制作了一个视频来说明原因:谢谢你的投入!可悲的是,这似乎不是原因。。。似乎总是停在这里:STD_OUT>[Spawn::addMonster]找不到Waspoid STD_OUT>[Spawn::addMonster]找不到爬虫STD_OUT>[Spawn::addMonster]找不到爬虫STD_OUT>[Spawn::addMonster]找不到爬虫STD_OUT>[Spawn::addMonster]我找不到布泽尔,但输入的信息比这个多很多。我认为他是对的——试着在循环中睡上一秒钟左右,让输入积累起来。可能不是一个长期的解决方案,但它应该可以确认诊断。我不认为这是真的,因为在有更多数据之前,readline将阻塞。只有在输入终止时,他才会收到null。请参阅以下内容并检查排名最高的答案(最受欢迎:)。但我认为该方法的名称具有误导性,并且没有遵循惯例。如果它被命名为isRedirectErrorStream()或getRedirectErrorStream(),就会更清楚。我同意!我不知道这是一个“getter”,你会认为这会像名字所说的那样,我错了:(令人惊讶的是,在发布后的一小时内,有很多很棒的人可以帮助你解决这样的问题,我印象深刻!)
while ((line = br.readLine()) != null) {               
    System.out.println(type + "> " + line);
}
procBuilder.redirectErrorStream();
procBuilder.redirectErrorStream(true);