Java Log4j挂起我的应用程序

Java Log4j挂起我的应用程序,java,multithreading,log4j,Java,Multithreading,Log4j,我试图从我的应用程序中的外部应用程序获取控制台输出。当我从代码调用externall应用程序时,它会挂起并显示以下消息: 正在配置日志记录 从以下位置配置log4j:C:\GPAT\log4j.cfg 什么也没发生。我在网上搜索了一下,似乎是线程问题。但我不能修改这个外部应用程序,我必须通过log4j。我阅读的外部应用程序如下: StringBuffer输出=新的StringBuffer() 感谢阅读。您需要在单独的线程中使用派生进程中的stdout和stderr,以防止阻塞行为(派生进程将

我试图从我的应用程序中的外部应用程序获取控制台输出。当我从代码调用externall应用程序时,它会挂起并显示以下消息:

正在配置日志记录

从以下位置配置log4j:C:\GPAT\log4j.cfg

什么也没发生。我在网上搜索了一下,似乎是线程问题。但我不能修改这个外部应用程序,我必须通过log4j。我阅读的外部应用程序如下:


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();
    }