gpt4 book ai didi

java - 将 Sysout 值路由到 JTextArea

转载 作者:行者123 更新时间:2023-12-01 12:04:33 25 4
gpt4 key购买 nike

所以,我在文件“Functions.java”中有一个方法,如下所示。

public static void updateDataToExcel (String ExcelFileName) throws IOException {
...
...
System.out.println("File Not Found!");
...
Sysout("File Created!");
...
Sysout("Data Updated");
...
}

现在,我在我的主类中调用它,其中有一个“文本区域”。因此,每当到达“sysout”时,我希望数据在下面的文本区域中更新,而不是在控制台中更新。

JTextArea txtrExecutionStatus = new JTextArea();
txtrExecutionStatus.setFont(new Font("Verdana", Font.PLAIN, 11));
txtrExecutionStatus.setText("Execution Status:\r\n");
txtrExecutionStatus.setBounds(53, 188, 378, 102);
panel.add(txtrExecutionStatus);

为此,我尝试通过为主类 (Object.java) 创建类来访问“txtrExecutionStatus”,但 JTextArea 不可访问。

有什么建议吗?我记得很久以前读过我们可以将系统输出从控制台路由到其他对象,但无法记忆/从谷歌获得答案。

先谢谢你了!!还有,提前祝大家新年快乐。 :)

最佳答案

可以使用System.setOut(PrintStream)重定向System.out。PrintStream 对字节进行操作,OutputStream。因此,必须创建一个 OutputStream,将这些字节转换为字符串 (Unicode)。然后就可以使用JTextArea.append了。我将 PrintStream 的自动刷新设置为 true。并覆盖冲洗以冲洗线路。为了更好的性能。

JTextArea txtrExecutionStatus = new JTextArea();
...
OutputStream textAreaOut = new OutputStream() {
private ByteArrayOutputStream lineBuffer = new ByteArrayOutputStream();

@Override
public void write(int b) {
lineBuffer.write(b);
}

@Override
public void flush() {
byte[] bytes = lineBuffer.toByteArray();
lineBuffer.reset();
String line = new String(bytes); // Default OS encoding.
txtrExecutionStatus.append(line);
}
}

PrintStream redirect = new PrintStream(textAreaOut, true);
System.setOut(redirect);

关于java - 将 Sysout 值路由到 JTextArea,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27720928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com