web-dev-qa-db-ja.com

コンソールのコンテンツをJavaのtextAreaにリダイレクトする方法は?

JavaのtextAreaでコンソールのコンテンツを取得しようとしています。

たとえば、このコードがある場合、

class FirstApp {
    public static void main (String[] args){
        System.out.println("Hello World");
    }
}

「Hello World」をtextAreaに出力したいのですが、どのactionPerformedを選択する必要がありますか?

15
user618111

メッセージコンソール は、これに対する1つの解決策を示しています。

6
camickr

私はこの簡単な解決策を見つけました:

まず、標準出力を置き換えるクラスを作成する必要があります。

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

5
Sertage

System.outPrintStreamのカスタムの監視可能なサブクラスにリダイレクトする必要があります。これにより、そのストリームに追加された各文字または行がtextAreaのコンテンツを更新できるようになります(おそらくAWTです)。またはSwingコンポーネント)

PrintStreamインスタンスは、リダイレクトされたSystem.outの出力を収集するByteArrayOutputStreamを使用して作成できます。

2
Andreas_D

System OutputStreamPipedOutputStreamに設定し、それをPipedInputStreamに接続してコンポーネントにテキストを追加することで、これを行うことができる方法の1つです。

PipedOutputStream pOut = new PipedOutputStream();   
System.setOut(new PrintStream(pOut));   
PipedInputStream pIn = new PipedInputStream(pOut);  
BufferedReader reader = new BufferedReader(new InputStreamReader(pIn));

あなたは次のリンクを見ましたか?そうでない場合は、する必要があります。

2
sgokhales
1
OscarRyz