JTextAreaを使用して「コンソール」で作業していますが、すべてがうまくいきます。Java:BufferedStreamsとイベントハンドラー
私はここでStackoverflowで見つけたクラスの修正版を使用しています。
import java.io.*;
import javax.swing.*;
public class textareaStream extends OutputStream {
//*************************
//* Parameters
//*************************
private JTextArea textArea; // target text area
private byte[] aByte; // array for write(int val);
//*************************
//* Constructor
//*************************
public textareaStream(JTextArea ta) {
textArea=ta;
aByte=new byte[1];
}
//*************************
//* Writing methods
//*************************
public void write(int val) {
aByte[0]=(byte)val;
write(aByte,0,1);
}
public void write(byte[] ba) {
write(ba,0,ba.length);
}
public synchronized void write(byte[] ba,int str,int len) {
try {
for(int xa=0; xa<10; xa++) {
try {
textArea.append(new String(ba,str,len));
break;
} catch(Throwable thr) {
if (xa==9) {
thr.printStackTrace();
} else {
Thread.sleep(200);
}
}
}
} catch(Throwable thr) {
CharArrayWriter caw=new CharArrayWriter();
thr.printStackTrace(new PrintWriter(caw,true));
textArea.append(System.getProperty("line.separator","\n"));
textArea.append(caw.toString());
}
}
}
「書き込み」メソッドがイベントハンドラから呼び出された場合を除いて、これは素晴らしい方法です。
イベントハンドラでは、イベントが終了するまでテキストがテキストエリアに書き込まれません。私が望むのは、コマンドが実行されるときにテキストがコンソールに書き込まれることです(これは特に時間のかかるコマンドに必要です)。つまり、ユーザーがEnterキーを押すと、JTextAreaにデータを印刷している間に長いプロセスが実行されますが、以降のテキストはまで表示されません。
誰も私がこれを回避する方法について考えている人はいますか?
ありがとうございました!エグゼキュータとスレッドプールの記事は、まさに私が探していたものです。それは魅力のように働く。答えに書かれた細部のレベル、スタイルノートさえ本当にありがたいです。 – Jason
おかげでジェイソン、助けてうれしい! –