あなたの場合、JDKのデフォルトのロギングを使用しているので、独自に作成java.util.Handler
してpublishメソッドを実装することもできます。ややこのように:
public class TextAreaHandler extends java.util.logging.Handler {
private JTextArea textArea = new JTextArea(50, 50);
@Override
public void publish(final LogRecord record) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
StringWriter text = new StringWriter();
PrintWriter out = new PrintWriter(text);
out.println(textArea.getText());
out.printf("[%s] [Thread-%d]: %s.%s -> %s", record.getLevel(),
record.getThreadID(), record.getSourceClassName(),
record.getSourceMethodName(), record.getMessage());
textArea.setText(text.toString());
}
});
}
public JTextArea getTextArea() {
return this.textArea;
}
//...
}
次に、Swingアプリケーションのハンドラーから次のようにテキスト領域を取得できます。
for(Handler handler: logger.getHandlers()){
if(handler instanceof TextAreaHandler){
TextAreaHandler textAreaHandler = (TextAreaHandler) handler;
getContentPane().add(textAreaHandler.getTextArea());
}
}
次に、logging.properties
ファイルに新しいハンドラーの構成が含まれていることを確認します。
hackers.logging.TestDrive.level=INFO
hackers.logging.TestDrive.handlers=hackers.logging.TextAreaHandler
また、この構成をデフォルトのlogging.properties
ファイル(JRE libフォルダーにある)に配置しない場合は、アプリケーションの起動時に、カスタマイズlogging.properties
したファイルへのパスをプロパティに指定してください。
java -Djava.util.logging.config.file=my-customized-logging.properties ...