JavaのtextAreaでコンソールのコンテンツを取得しようとしています。
たとえば、このコードがある場合、
class FirstApp {
public static void main (String[] args){
System.out.println("Hello World");
}
}
「Hello World」をtextAreaに出力したいのですが、どのactionPerformedを選択する必要がありますか?
メッセージコンソール は、これに対する1つの解決策を示しています。
私はこの簡単な解決策を見つけました:
まず、標準出力を置き換えるクラスを作成する必要があります。
public class CustomOutputStream extends OutputStream {
private JTextArea textArea;
public CustomOutputStream(JTextArea textArea) {
this.textArea = textArea;
}
@Override
public void write(int b) throws IOException {
// redirects data to the text area
textArea.append(String.valueOf((char)b));
// scrolls the text area to the end of data
textArea.setCaretPosition(textArea.getDocument().getLength());
// keeps the textArea up to date
textArea.update(textArea.getGraphics());
}
}
次に、次のように標準を置き換えます。
JTextArea textArea = new JTextArea(50, 10);
PrintStream printStream = new PrintStream(new CustomOutputStream(textArea));
System.setOut(printStream);
System.setErr(printStream);
問題は、すべての出力がテキスト領域にのみ表示されることです。
サンプル付きのソース: http://www.codejava.net/Java-se/swing/redirect-standard-output-streams-to-jtextarea
System.out
をPrintStream
のカスタムの監視可能なサブクラスにリダイレクトする必要があります。これにより、そのストリームに追加された各文字または行がtextAreaのコンテンツを更新できるようになります(おそらくAWTです)。またはSwingコンポーネント)
PrintStream
インスタンスは、リダイレクトされたSystem.out
の出力を収集するByteArrayOutputStream
を使用して作成できます。
System OutputStream
をPipedOutputStream
に設定し、それをPipedInputStream
に接続してコンポーネントにテキストを追加することで、これを行うことができる方法の1つです。
PipedOutputStream pOut = new PipedOutputStream();
System.setOut(new PrintStream(pOut));
PipedInputStream pIn = new PipedInputStream(pOut);
BufferedReader reader = new BufferedReader(new InputStreamReader(pIn));
あなたは次のリンクを見ましたか?そうでない場合は、する必要があります。