Jtextarea にコンソール出力を 1 つずつ表示する方法に問題がありました。システム コンソールの出力を JTextarea に正常にリダイレクトしました。しかし、問題は、実際のシステム コンソールでは、出力が 1 つずつ表示されることです (私は Thread.sleep() 関数を設定したので、結果はたとえば 0.5 秒ごとに表示されます)。しかし、JTextarea では、出力はループが終了したときに 1 回だけ表示され、実際のシステム コンソールのように 1 つずつ表示されるわけではありません。
ループは GUI ボタンによってトリガーされます。以下のサンプルコードをご覧ください。これはコードの一部です。
// Create a button.
but.setVerticalTextPosition(AbstractButton.CENTER);
but.setHorizontalTextPosition(AbstractButton.LEADING);
but.setActionCommand("publish");
but.addActionListener(this);
// Button action
public void actionPerformed(ActionEvent e) {
final JButton source = (JButton)e.getSource();
if(source.equals(but)){
for( int i = 0 ; i < 5 ; i++ ) {
System.out.println( i );
// regular textarea output
//JTextarea.append(Integer.toString(i));
try {
Thread.sleep( 500 );
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
ご覧のとおり、ループ内で System.out.println( i ) を使用しています。これは、システム コンソールの出力を JTextarea にリダイレクトしたため、出力が JTextarea にあるためです。
問題は、上で述べたように、実際のコンソールでは、出力が 500 ミリ秒ごとに 1 つずつ表示されることです。しかし、リダイレクトされた Jtextarea では、すべてのループが完了すると結果が 1 回表示されます。なぜこのようになっているのかわかりません。リダイレクトされた JTextarea にも出力を 1 つずつ表示する必要があります。
誰でも私を助けてください。どうもありがとう!