所以,我在文件' 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);
为此,我尝试了访问" txtrExecutionStatus"通过为我的主类(Object.java)创建类,但无法访问JTextArea。
有什么建议吗?我记得很长一段时间,我们可以将sysout从Console路由到其他对象,但无法从谷歌回忆/得到答案。
提前谢谢!!并且,提前新年快乐。 :)
答案 0 :(得分:1)
可以使用System.setOut(PrintStream)
重定向System.out。
PrintStream对字节OutputStream进行操作。
因此,必须创建一个OutputStream,它将这些字节转换为String(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);