Java Log4j挂起我的应用程序
我试图从我的应用程序中的外部应用程序获取控制台输出。当我从代码调用externall应用程序时,它会挂起并显示以下消息: 正在配置日志记录 从以下位置配置log4j:C:\GPAT\log4j.cfg 什么也没发生。我在网上搜索了一下,似乎是线程问题。但我不能修改这个外部应用程序,我必须通过log4j。我阅读的外部应用程序如下:Java Log4j挂起我的应用程序,java,multithreading,log4j,Java,Multithreading,Log4j,我试图从我的应用程序中的外部应用程序获取控制台输出。当我从代码调用externall应用程序时,它会挂起并显示以下消息: 正在配置日志记录 从以下位置配置log4j:C:\GPAT\log4j.cfg 什么也没发生。我在网上搜索了一下,似乎是线程问题。但我不能修改这个外部应用程序,我必须通过log4j。我阅读的外部应用程序如下: StringBuffer输出=新的StringBuffer() 感谢阅读。您需要在单独的线程中使用派生进程中的stdout和stderr,以防止阻塞行为(派生进程将
StringBuffer输出=新的StringBuffer()
感谢阅读。您需要在单独的线程中使用派生进程中的stdout和stderr,以防止阻塞行为(派生进程将写入缓冲区,如果这些缓冲区没有被消费进程清空,则会被阻塞) 请参阅的第2段以了解更多详细信息和指向适当修复的链接
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(GSATCommand);
BufferedReader input = new BufferedReader(new InputStreamReader(proc.getInputStream()));
System.out.println("Test running...");
String line = null;
while ((line = input.readLine()) != null) {
System.out.println(line); // Writes the test output to console
output.append(line); output.append("\n");
}
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
System.out.println("Test successfully executed");
} catch (Throwable t) {
t.printStackTrace();
}