Java 如何将多个类中的多个systen.out.println()显示到一个GUI(如JTextArea)中
如何将多个类中的多个systen.out.println()显示到一个GUI(如JTextArea)中 大家好,我正在做一个学校项目,我有几个类,它们有system.out.println()来显示控制台输出。但是现在我需要将控制台输出显示到gui中 例如 第一类有system.out.println(“第一类”); 第二类有system.out.println(“第二类”) 我有一个GUI类,guiJava.class,其中包含JtextArea 有人知道怎么做吗 我在网上读到的是使用以下代码:Java 如何将多个类中的多个systen.out.println()显示到一个GUI(如JTextArea)中,java,Java,如何将多个类中的多个systen.out.println()显示到一个GUI(如JTextArea)中 大家好,我正在做一个学校项目,我有几个类,它们有system.out.println()来显示控制台输出。但是现在我需要将控制台输出显示到gui中 例如 第一类有system.out.println(“第一类”); 第二类有system.out.println(“第二类”) 我有一个GUI类,guiJava.class,其中包含JtextArea 有人知道怎么做吗 我在网上读到的是使用以下代码
PrintStream standardOut;
PrintStream printStream = new PrintStream(new CustomOutputStream(jTextArea1));
// keeps reference of standard output stream
standardOut = System.out;
// re-assigns standard output stream and error output stream
System.setOut(printStream);
System.setErr(printStream);
但这似乎只显示guiJava.class中的System.out.println(),而不是类1和类2中的所有sysout行。下面是一个使用
PipedOutputStream
的示例(代码大量借用)
如果运行此命令,您将在main(…)
函数中看到对System.out.println(…)
的调用,这些调用将打印到JTextArea
public static void main(String [] args) {
JTextArea area = new JTextArea();
PrintStream stream = new PrintStream(new TextAreaOutputStream(area));
System.setOut(stream);
System.setErr(stream);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JScrollPane(area));
frame.setLocationRelativeTo(null);
frame.setSize(400, 200);
frame.setVisible(true);
System.out.println();
System.out.println("test");
System.out.println();
System.out.println("test 2");
System.out.println();
System.out.println("test 3");
}
public static class TextAreaOutputStream extends OutputStream {
private JTextArea textArea;
public TextAreaOutputStream(JTextArea textArea) {
this.textArea = textArea;
}
@Override
public void write(int character) throws IOException {
textArea.append(String.valueOf((char) character));
textArea.setCaretPosition(textArea.getDocument().getLength());
}
}
此外,如果您已经拥有了大部分GUI,并且不需要所有这些代码,那么您只需制作一个JTextArea
,代码的关键部分如下:
try {
PrintStream out = new PrintStream(new MyOutputStream(textAreaPrinter.outputArea), true, "UTF-8");
System.setOut(out);
} catch (IOException ioe) {
textAreaPrinter.outputArea.append(ioe.getMessage());
}
运行上述代码段后,对
System.out.println(…)
的所有调用都应该转到JTextArea
我建议您学习一些好教程中的Swing
基础知识,例如学习@ArvindKumarAvinash推荐的教程。您会发现,您没有使用System.out
创建JTextArea。
public static void main(String [] args) {
JTextArea area = new JTextArea();
PrintStream stream = new PrintStream(new TextAreaOutputStream(area));
System.setOut(stream);
System.setErr(stream);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JScrollPane(area));
frame.setLocationRelativeTo(null);
frame.setSize(400, 200);
frame.setVisible(true);
System.out.println();
System.out.println("test");
System.out.println();
System.out.println("test 2");
System.out.println();
System.out.println("test 3");
}
public static class TextAreaOutputStream extends OutputStream {
private JTextArea textArea;
public TextAreaOutputStream(JTextArea textArea) {
this.textArea = textArea;
}
@Override
public void write(int character) throws IOException {
textArea.append(String.valueOf((char) character));
textArea.setCaretPosition(textArea.getDocument().getLength());
}
}