Java中的标准输出

Java中的标准输出,java,logging,outputstream,Java,Logging,Outputstream,我需要在GUI应用程序中获得JAR文件的控制台输出。我正在运行JAR,从GUI应用程序调用命令行,如下所示: String cmdLine = "java -jar myjar.jar"; myProcess = Runtime.getRuntime().exec(cmdLine); BufferedReader input = new BufferedReader(new InputStreamReader(myProcess.getInputStream())); while ((line

我需要在GUI应用程序中获得JAR文件的控制台输出。我正在运行JAR,从GUI应用程序调用命令行,如下所示:

String cmdLine = "java -jar myjar.jar";
myProcess = Runtime.getRuntime().exec(cmdLine);
BufferedReader input = new BufferedReader(new InputStreamReader(myProcess.getInputStream()));
while ((line = input.readLine()) != null) { //do something }
在myjar.JAR中,我创建了一个CustomPrintStream,以便将所有内容记录到txt文件和控制台中。这是:

public class CustomPrintStream extends PrintStream
{
static private FileHandler fileTxt;

Logger logger;

public CustomPrintStream()
{
    super(new ByteArrayOutputStream());

    try
    {
        this.logger = Logger.getLogger("LOGGER");
        this.logger.setLevel(Level.INFO);
        fileTxt = new FileHandler("Logging.txt");
    }
    catch (Exception ex)
    {
        // do nothing!
    }

    CustomRecordFormatter formatter = new CustomRecordFormatter();
    this.fileTxt.setFormatter(formatter);
    this.logger.addHandler(fileTxt);

    ConsoleHandler ch = new ConsoleHandler();
    ch.setFormatter(formatter);
    logger.addHandler(ch);

    logger.setUseParentHandlers(false);
}

@Override
public void print(String s)
{
    super.print(s);
    logger.info(s);
}
}
另外,我将myjar.JAR的标准输出设置为自定义流:

System.setOut(CustomPrintStream);
在windows命令行中运行JAR文件可以很好地工作,但是当我试图在GUI应用程序中以编程方式获取控制台输出时,它就是不起作用


有人知道这个解决方案吗?

GUI应用程序没有“控制台”。为什么不尝试添加jar作为对GUI项目的引用,并以编程方式调用正确的函数?

我不添加jar作为引用,因为其他人正在实现jar文件,我的GUI应用程序应该尽可能独立。将来,JAR文件将被更新几次,而我的GUI应用程序不会。信息流将是:GUI->将JAR文件作为一个进程调用->获取控制台输出->返回到GUI您描述的问题可以使用接口轻松解决。只需为需要调用的函数定义一个接口,而不必考虑实现。