Java中的标准输出
我需要在GUI应用程序中获得JAR文件的控制台输出。我正在运行JAR,从GUI应用程序调用命令行,如下所示: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
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您描述的问题可以使用接口轻松解决。只需为需要调用的函数定义一个接口,而不必考虑实现。