Java 如何将多个类中的多个systen.out.println()显示到一个GUI(如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 有人知道怎么做吗 我在网上读到的是使用以下代码

如何将多个类中的多个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());
      }
}