0

ここでこのコードを見つけました:ボタンアクションがトリガーされ、コンソール出力をjtextareaに表示するときに、ループ内でJava JTextareaにコンソール出力を1つずつ 表示する方法。このクラスを 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();
    }
}
4

1 に答える 1

1

あなたが持っている例(Hovercraft Full of Eelsで概説されている悪い例を除けば)は、コンソール出力のリダイレクトとは何の関係もありません。

標準出力をテキスト領域にリダイレクトする場合は、出力ストリームを TextArea に設定する方法の例をご覧ください。

他のプロセスの出力をリダイレクトしたい場合は、自分でプロセスを起動した場合にのみこれを行うことができます.別の実行中のプロセスの標準のアウト/インに接続する(私が知っている簡単な方法)はありません(あなたのプログラムが直接起動しなかったことを確認してください)

例については、「プロセスから Java InputStream を印刷する」を参照してください。

于 2013-10-02T20:28:12.890 に答える