【问题标题】:Java: Create text window to display console textJava:创建文本窗口以显示控制台文本
【发布时间】:2014-08-16 10:48:20
【问题描述】:

我希望在我的 java 程序中创建一个单独的窗口,以基本上显示我使用 println() 打印的内容。如果某些文本以“错误:”开头,那么有某种方法可以使某些文本被读取和/或加粗会很好。有没有简单或直接的方法来做到这一点?

【问题讨论】:

  • 你问如何改变文字的颜色?
  • 抱歉,一定是用词错误。这只是我想要的一个附带问题,我最终想知道的是如何制作一个单独的窗口来显示我打印到控制台的所有内容。这样,当使用我的程序的人在 ide 之外运行它时,他们将看到我正在打印的所有内容。
  • 好的,请看下面我的回答。
  • 您的具体问题是什么?你问如何创建一个窗口?您是否在问如何将文本区域添加到窗口?还是您特别询问如何进行 stdout/stderr 重定向?

标签: java console jconsole


【解决方案1】:

一种简单的方法是编写一个以String 作为参数的函数,然后 1) 使用System.out.print*() 打印到控制台,然后将文本打印或复制到该窗口的JTextField 或构造函数, 或您用于在该窗口中打印文本的任何方法,即:

public method printAndCopyText(String text) {
   System.out.println(text);
   otherWindowObject.getTextFieldObject().setText(text);
}

【讨论】:

    【解决方案2】:

    这是一个示例

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

    【讨论】:

      猜你喜欢
      • 2015-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多