我希望在我的java程序中创建一个单独的窗口来显示我用println()打印的东西。如果有一些方法可以使某些文本以“error:“开头的话,那就太好了。有没有简单直接的方法可以做到这一点?
chhqkbe11#
一个简单的方法是编写一个函数,该函数将String作为参数,然后1)使用System.out.print*()打印到控制台,然后将文本打印或复制到该窗口的JTextField或构造函数,或者您在该窗口中打印文本所使用的任何方法,即:
String
System.out.print*()
JTextField
public method printAndCopyText(String text) { System.out.println(text); otherWindowObject.getTextFieldObject().setText(text); }
lrl1mhuk2#
以下是一个示例
import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOutputStream; import java.io.PrintStream; import java.util.List; import java.util.Scanner; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JTextPane; import javax.swing.SwingWorker; public class JConsole { public static void main(String[] args) throws IOException { JFrame frame = new JFrame("JConsole"); JTextPane jta = new JTextPane(); JButton button = new JButton("Run"); frame.setLayout(new BorderLayout()); frame.add(button,BorderLayout.NORTH); frame.add(jta,BorderLayout.CENTER); button.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { new SwingWorker<Void, Object>(){ @Override protected Void doInBackground() throws Exception { outputTest("inner"); return null; }}.execute(); }}); frame.setSize(400, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); console(jta); } public static void outputTest(String msg){ for(int i=0;i<10;i++){ System.out.println(i+" "+msg); try { Thread.sleep(500); } catch (InterruptedException ex) { ex.printStackTrace(); } } } public static void console(final JTextPane area) throws IOException { area.setContentType("text/html"); final PipedInputStream outPipe = new PipedInputStream(); System.setOut(new PrintStream(new PipedOutputStream(outPipe), true)); new SwingWorker<Void, String>() { @Override protected Void doInBackground() throws Exception { Scanner s = new Scanner(outPipe); while (s.hasNextLine()){ String line = s.nextLine(); publish(line + "\n"); } return null; } @Override protected void process(List<String> chunks) { for (String line : chunks){ area.setText("<font size=\"3\" color=\"red\">"+line+"</font>"); } } }.execute(); } }
2条答案
按热度按时间chhqkbe11#
一个简单的方法是编写一个函数,该函数将
String
作为参数,然后1)使用System.out.print*()
打印到控制台,然后将文本打印或复制到该窗口的JTextField
或构造函数,或者您在该窗口中打印文本所使用的任何方法,即:lrl1mhuk2#
以下是一个示例