首页 > 解决方案 > 如何将多个类中的多个 systen.out.println() 显示到单个 GUI 中,例如 JTextArea

问题描述

如何将多个类中的多个 systen.out.println() 显示到单个 GUI 中,例如 JTextArea。

嗨,我正在做一个学校项目,我有几个类有 system.out.println() 来显示控制台输出。但是现在我需要将控制台输出显示到 gui 中。

例如,第一类有 system.out.println("class one"); 第二类有 system.out.println("class 2");

我有一个 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(),而不是 class 1 和 class2 中的所有 sysout 行。

标签: java

解决方案


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());
      }
}

推荐阅读