Swing/TextAreaOutputStream のバックアップ(No.6)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/TextAreaOutputStream へ行く。
- 1 (2015-02-16 (月) 00:04:57)
- 2 (2015-02-25 (水) 17:19:56)
- 3 (2015-10-02 (金) 21:05:47)
- 4 (2016-05-30 (月) 17:59:51)
- 5 (2016-11-02 (水) 20:02:10)
- 6 (2017-11-18 (土) 13:55:06)
- 7 (2017-12-01 (金) 18:12:12)
- 8 (2018-02-24 (土) 19:51:30)
- 9 (2019-08-07 (水) 20:18:48)
- 10 (2019-11-27 (水) 13:51:45)
- 11 (2021-06-04 (金) 11:28:17)
- 12 (2022-08-05 (金) 16:01:40)
- 13 (2023-03-30 (木) 05:29:04)
- category: swing
folder: TextAreaOutputStream
title: JTextAreaにLoggerのログを出力する
tags: [JTextArea, OutputStream, StreamHandler, Logger]
author: aterai
pubdate: 2015-02-16T00:00:51+09:00
description: Loggerのログ出力をJTextAreaに表示するためのOutputStreamとStreamHandlerを作成します。
image:
hreflang:
href: http://java-swing-tips.blogspot.com/2015/02/logging-into-jtextarea.html lang: en
概要
Logger
のログ出力をJTextArea
に表示するためのOutputStream
とStreamHandler
を作成します。
Screenshot
Advertisement
サンプルコード
class TextAreaOutputStream extends OutputStream {
private final ByteArrayOutputStream buf = new ByteArrayOutputStream();
private final JTextArea textArea;
public TextAreaOutputStream(JTextArea textArea) {
super();
this.textArea = textArea;
}
@Override public void flush() throws IOException {
textArea.append(buf.toString("UTF-8"));
buf.reset();
}
@Override public void write(int b) throws IOException {
buf.write(b);
}
}
View in GitHub: Java, Kotlin解説
TextAreaOutputStream
ByteArrayOutputStream
を使用して、JTextArea
に一行ずつ書き込みを行う- これを
System.setOut(new PrintStream(new TextAreaOutputStream(textArea), true, "UTF-8"));
のように標準出力ストリームに割り当てると、System.out.println(...)
などで改行文字が書き込まれたときに、バッファーのflush()
が呼び出され、textArea.append(buf.toString("UTF-8"));
でJTextArea
に文字列が追記される
TextAreaHandler
- ログ出力を上記の
TextAreaOutputStream
などに割り当てるため、StreamHandler
を継承するTextAreaHandler
を作成し、Logger#addHandler(...)
で設定 StreamHandler#setEncoding(...)
でエンコーディングをUTF-8
に設定StreamHandler#publish(...)
、StreamHandler#close(...)
をオーバーライド
- ログ出力を上記の
class TextAreaHandler extends StreamHandler {
private void configure() {
setFormatter(new SimpleFormatter());
try {
setEncoding("UTF-8");
} catch (IOException ex) {
try {
setEncoding(null);
} catch (IOException ex2) {
// doing a setEncoding with null should always work.
// assert false;
ex2.printStackTrace();
}
}
}
public TextAreaHandler(OutputStream os) {
super();
configure();
setOutputStream(os);
}
//@see java/util/logging/ConsoleHandler.java
@Override public void publish(LogRecord record) {
super.publish(record);
flush();
}
@Override public void close() {
flush();
}
}
参考リンク
- System.out.println() Print to JFrame | Oracle Community
- External Program Output To JTextArea - Java | Dream.In.Code
- 標準出力を JTextArea に出力する - As I like it.
- Message Console « Java Tips Weblog