java - 即使发生其他操作,也在 jtextarea 中显示控制台输出

标签 java eclipse swing console

我在这里找到了这段代码:how to display console output in java JTextarea one by one in a loop when button action is triggered 它在 jtextarea 中显示控制台输出。 我已将此类添加为 jmenuitem 中的操作。这样它就会在我想要的时候出现,并且当我运行其他类时它会在那里显示输出。然而,当我启动它时,它工作正常,但如果我尝试启动另一个类,它将在控制台中显示输出并接受用户输入,jtextarea 应该同时显示控制台输出,它会卡住。尽管调用其他类/框架,我怎样才能使它保持调整?提前致谢

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class DynamicWrite implements ActionListener
{
    JFrame frame = new JFrame("TextArea");
    JTextArea tArea = new JTextArea(10,20);
    JButton button = new JButton("Click");
    JScrollPane pane = new JScrollPane(tArea);
    SwingWorker worker;
    String s= "Java is an Object Oriented Programming langauge...Java is static typed language...asbfldfjsdj";//some random String
    public void prepareAndShowGUI()
    {
        Container container = frame.getContentPane();
        container.add(pane);container.add(button,BorderLayout.NORTH);
        tArea.setLineWrap(true);
        tArea.setWrapStyleWord(true) ;
        button.addActionListener(this);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
    public void actionPerformed(ActionEvent evt)
    {
        if(evt.getSource()==button)
        {
            tArea.setText("");
            if (worker!=null)
            {
                worker.cancel(true);
            }
            worker = new SwingWorker()
            {
                @Override
                protected Integer doInBackground()//Perform the required GUI update here.
                {
                    try
                    {
                        for(int i = 0;i<s.length();i++)
                        {
                            tArea.append(String.valueOf(s.charAt(i)));
                            Thread.sleep(5);
                        }
                    }catch(Exception ex){}
                    return 0;
                }       
            };
            worker.execute();//Schedules this SwingWorker for execution on a worker thread.
        }
    }   
    public static void main(String st[])
    {
        DynamicWrite dyna = new DynamicWrite();
        dyna.prepareAndShowGUI();
    }
}

最佳答案

您的示例(除了 Hovercraft Full of Eels 所概述的坏示例之外)与重定向控制台输出无关。

如果您想将标准输出重定向到文本区域,请查看 How to set output stream to TextArea 的示例

如果您想重定向其他进程的输出,那么您只能在自己启动该进程的情况下执行此操作,没有(我知道的简单方法)连接到另一个进程的标准输出/输入正在运行的进程(您的程序没有直接自行启动)

查看 Printing a Java InputStream from a Process 示例

关于java - 即使发生其他操作,也在 jtextarea 中显示控制台输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19145995/

相关文章:

java - 为什么 Java 运行时在 SSL 信任存储的工作方式以及我们如何处理它方面存在如此大的差异?

java - JTable 使用数组字符串。这些数据在 try-catch 中

java - 按钮不会链接到 Javascript

java - 使用 Eclipse 将小程序添加到网站

java - 如果子级未使用事件,则允许父级处理鼠标事件

java - BufferedImage 旋转后被切断

java - 从 AsyncTask 添加数据的 Android Listview 问题

java - 如何在 Eclipse 中将 github maven 项目作为 jar 文件导入?

java - 在 Microsoft Windows Mobile 6.5.3 Professional 上开发 java 应用程序

java - 如何动态地将db值放入jlist中?