所以,我在文件“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/