Swing JEditorPaneAppender (Output im HTML-Format)

guni

Bekanntes Mitglied
Hallo,

versuche gerade einen JEditorAppener für log4j zu schreiben.

der JTextAppender ist ja recht einfach, da die logmessage als innerhalb der append-Methode des Appenders einfach in einen String umgewandelt werden kann ...
Java:
final String msg = layout.format(loggingEvent);
... den man dann mittels jTextPane.append(String) einfach in die Textpane schreibt.

Für eine JEditorPane scheint das Ganze eine Spur komplexer zu sein ...
die Read-Methode erwartet einen InputStream.
Und ein Doc.
Keine Ahnung, was ich da als Doc hernehmen kann ...
Keine Ahnung, wie ich die logmessage halbwegs performant in einen InputStream bringe ...
hab mir auch schon überlegt, den ConsoleAppender so zu extenden, dass ich den OutputStream an eine pipe übergebe ... aber Pipes sollte man ja eigentlich nur zwischen Threads hernehmen, oder?!

irgendwelche Vorschläge?!

mfg, guni
 

guni

Bekanntes Mitglied
Guten Morgen.

habe nun im Netz einen TextAppender gefunden, den ich ein bisschen auf meine Bedürfnisse abgestimmt habe:

Java:
public class TextAreaAppender extends JScrollPane {
	private static final long serialVersionUID = 4307257775374222157L;
	private final JTextArea jTextArea = new JTextArea();
	
	private class LogWatcher extends AppenderSkeleton {

		private LogWatcher() {
//			layout = new PatternLayout("%m%n");
			layout = new SimpleLayout();
		}

		@Override
		protected void append(final LoggingEvent event) {
			new Thread(new Runnable() {
				public void run() {
					jTextArea.append(layout.format(event));
				}
			}).start();
		}

		@Override
		public void close() {
		}

		@Override
		public boolean requiresLayout() {
			return true;
		}
	}

	public TextAreaAppender() {
		Logger.getRootLogger().setLevel(Level.ALL);
		Logger.getRootLogger().addAppender(new LogWatcher());

		jTextArea.setEditable(false);
		jTextArea.setFont(new Font("Courier", Font.PLAIN, 12));
		DefaultCaret caret = (DefaultCaret) jTextArea.getCaret();
		caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);

		setViewportView(jTextArea);
		setPreferredSize(new Dimension(640,480));
	}
}

Werde das Ganze noch ein bisschen ändern, da ich es designmäßig schrecklich finde, dass der Appender von einer Swing-Komponente erbt (aus meiner Sicht sollten Appender und TextWindow schon getrennt sein)

Wie auch immer ...

vielleicht kann sich unter dem obenstehenden Code wer was vorstellen.
Also: Ziel wäre, das Layout durch ein HTML-Layout zu ersetzen und in eine JEditorPane zu schreiben ... dann werden Fehler endlich farblich hervorgehoben !!!

hat jemand eine Idee, wie ich da beginnen könnte?!
 

guni

Bekanntes Mitglied
so geht es auch nicht:

Java:
public class HTMLAppender extends AppenderSkeleton {
	private JEditorPane jEditorPane;
	
	public HTMLAppender(JEditorPane jEditorPane){
		super();
		this.layout = new HTMLLayout();
		this.jEditorPane = jEditorPane;
	}

	@Override
	protected void append(final LoggingEvent event) {
		final String msg = layout.format(event);
		new Thread(new Runnable() {
			public void run() {
				try {
					jEditorPane.read(new StringReader(msg), null);
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}).start();
	}

	@Override
	public void close() {
	}

	@Override
	public boolean requiresLayout() {
		return true;
	}
}

der Grund is vermutlich, dass für jedes Logging event ein neuer Reader initialisiert wird!

HILFE!!!!!
 

Andi_CH

Top Contributor
Erstens weiss ich (und vermutlich andere auch nicht) so genau WAS du eigentlich willst.

Zweitens ist es hier so, dass am ehesten Anworten kommen, wenn du eigenen Code, der auch als solcher zu erkennen ist, postest und ganz konkret fragst warum etwas nicht geht oder warum diese oder jene Fehlermeldung auftritt.
 

guni

Bekanntes Mitglied
@Andi:
Zweitens ist es hier so, dass am ehesten Anworten kommen, wenn du eigenen Code, der auch als solcher zu erkennen ist
Sämtlicher Code den du hier findest ist eigener Code.
Wie gesagt: beim TextAppender hab ich mir Quelltext zur Hilfe genommen, den ich irgendwo gefunden habe, der HTMLAppender ist völlig auf eigenem Mist gewachsen.

und ganz konkret fragst warum etwas nicht geht oder warum diese oder jene Fehlermeldung auftritt
Es tritt ja keine Fehlermeldung auf! Ich weiß nur nicht, wie ich das umsetzen soll.

Erstens weiss ich (und vermutlich andere auch nicht) so genau WAS du eigentlich willst.
OK ... also - ich versuchs nochmal zu erklären.
Apache hat eine Logging API (log4j).
In dieser API spielen 3 Komponenten zusammen:
1. Logger - für das eigentliche Logging
2. Layout - geben an, wie ein LogEvent formatiert werden soll
3. Appender - geben an, wo die LogEvents ausgegeben werden sollen (z.B. in der Console, in einer Datei, ...)

mein Ziel ist es nun, einen Appender zu schreiben, der Logmeldungen in einem SWING-Fenster ausgibt.
Unter Einsatz einer JTextArea ist mir das bereits gelungen (-> Code): sämtliche Logevents, die während dem Ablauf des Programmes auftreten, werden in diesem Fenster mitgeschrieben.

nun gibt es unter log4j allerdings auch ein HTML-Layout.
und unter SWING gibt es eine JEditorPane, die einen HTMLEditorKit nutzen kann.

nun will ich meinen Appender (HTMLAppender) so schreiben, dass JEDES LOGEVENT (möglichst performant) in die JEditorPane dazugeschrieben wird.

Meine Frage an die Community ist also: WIE KANN ICH DEN CONTENT DER JEDITORPANE UM EINEN STRING ERWEITERN?!

mfg, guni
 

AmunRa

Gesperrter Benutzer
Java:
String newText = editorpane.getText()+"HIER IST EINE NEUE ZEILE";
editorpane.setText(newText);


So kannst du einen String anhängen
 

Andi_CH

Top Contributor
Zuletzt bearbeitet:

guni

Bekanntes Mitglied
Hmm ...
ich tu mir ein bisschen schwer, dass ich herausfinde, wo meine Problembeschreibung unklar is ...

vielleicht hilft dieser Link:

Logging Comparison: The TextArea Appender

ich möchte eben keine TextArea haben wo die Logger im SimpleLayout loggen sondern eine JEditorPane wo die Logger im HTMLLayout loggen.

mfg, guni
 

henpara

Bekanntes Mitglied
Java:
JEditorPane htmlDisplay = new JEditorPane;
htmlDisplay.setContentType("text/html");
Ist es das, was du suchst?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
harrytut Java Input/Output Tests Junit Allgemeine Java-Themen 3
Tobero Batch Vorgang zum output Allgemeine Java-Themen 3
B In Java Methode mit generic input und output basteln? Allgemeine Java-Themen 4
X Output von ArrayList Allgemeine Java-Themen 3
S Gradle "schluckt" output und error Allgemeine Java-Themen 1
S Unerwarteter Output (kleines Raetsel) Allgemeine Java-Themen 6
TheWhiteShadow 2D-Grafik GIF Library mit byte output Allgemeine Java-Themen 10
J Java Sound Api Sound input und Output auswählen Allgemeine Java-Themen 4
T ProcessBuilder Output Allgemeine Java-Themen 12
T Threads Input/Output im Thread - Datei ohne Inhalt Allgemeine Java-Themen 1
M Output einer anderen/externen .jar in eigene JTextArea Allgemeine Java-Themen 4
B Input/Output Server Startet, Jedoch Kein Output. Allgemeine Java-Themen 1
N Kalender Normen input/output Allgemeine Java-Themen 2
B Best Practice HTML Output Optimal implementieren Allgemeine Java-Themen 3
H Input/Output Binäre Daten konvertieren, Output hat Zeilenumbrüche?? Allgemeine Java-Themen 9
G LayoutManager Launch4j: Launcher startet nur in Output Directory Allgemeine Java-Themen 4
H Binary File Output Allgemeine Java-Themen 15
G Output eines über Runtime.getRuntime.exec gestarteten Jars Allgemeine Java-Themen 6
W In Runtime Output schreiben Allgemeine Java-Themen 5
O Output From Java Creator? Allgemeine Java-Themen 3
J Threads + Dualcore = Probleme mit dem Output auf der Konsole Allgemeine Java-Themen 12
R InputStream - seltsamer Output Allgemeine Java-Themen 2
N IOException: "Reading from an output buffer" ? Allgemeine Java-Themen 2
K Output eines Runtimes Allgemeine Java-Themen 2
C Process output Allgemeine Java-Themen 7
M Output Stream / Protokoll does not support output Allgemeine Java-Themen 2
J Output Stream Allgemeine Java-Themen 4
S Bookmark HTML Datei einlesen, alle Links erhalten und manche editieren..? (aktuell JSoup) Allgemeine Java-Themen 4
S HTML einer Webseite 1:1 so bekommen wie es auch der Browser anzeigt? Allgemeine Java-Themen 14
C Parsen einer sich updatenden Html mithilfe von jsoup Allgemeine Java-Themen 4
I HTML / XHTML Seite nach Excel exportieren. Suche Lib Allgemeine Java-Themen 12
F Kennt ihr eine Library um 2 HTML Seiten zu diffen? Allgemeine Java-Themen 8
K HTMLEditor HTML Text in Rich Text umwandeln Allgemeine Java-Themen 14
N Value Wert aus HTML-Button mittels thymeleaf spring an java übergeben Allgemeine Java-Themen 2
N Lottowebsite programmieren mittels Java, HTML,.... Allgemeine Java-Themen 7
S HTML den ich von einer URL hole nicht identisch mit dem HTML im Browser Allgemeine Java-Themen 1
M Html Seite auslesen Allgemeine Java-Themen 16
Developer_X Website HTML Code von HTTPS URL laden Allgemeine Java-Themen 0
L HTML Formular ausführen Allgemeine Java-Themen 1
J Auslesen Daten Java/HTML Allgemeine Java-Themen 15
A Applet in HTML einbinden Allgemeine Java-Themen 1
KeVoZ_ JSoup - HTML Tag entfernen Allgemeine Java-Themen 1
I HTML einer Website auslesen liefert nur head Allgemeine Java-Themen 6
perlenfischer1984 HTML Code decodieren Allgemeine Java-Themen 2
stylegangsta Mehrere html seiten einer Homepage einlesen und als Textdatei ausgeben Allgemeine Java-Themen 14
P HTML Text bearbeiten Allgemeine Java-Themen 1
A Probleme beim auslesen von Quelltext (HTML) Allgemeine Java-Themen 5
OnDemand String aus html einlesen Allgemeine Java-Themen 2
OnDemand Substring einer HTML Seite will nicht Allgemeine Java-Themen 5
S Applet in html laden; InvocationTargetException,.. nur warum ? Allgemeine Java-Themen 0
R HTML Tabelle durchsuchen Allgemeine Java-Themen 3
L Erste Schritte Eclipse und Lokal funktioniert - in HTML nicht! Allgemeine Java-Themen 2
T Keyword Highlighting in HTML Allgemeine Java-Themen 5
A jEditorPane Html Datei öffnen (code) Allgemeine Java-Themen 3
Y Applet/Html - Wie Java-Methode aufrufen, die einen Parameter erwartet? Allgemeine Java-Themen 3
H HTML Parsing errors Allgemeine Java-Themen 9
P Aktuellen HTML Code auslesen (von JS manipuliert) Allgemeine Java-Themen 3
M HTML-Code von Webseite über Browser oder Console auslesen?? Allgemeine Java-Themen 5
S Robuste Methode um Text von HTML code zu extrahieren..? Allgemeine Java-Themen 6
S Bekomme mit Scanner und URL keine Html-Seite ausgelesen Allgemeine Java-Themen 3
C JEditorPane langsam großes HTML Allgemeine Java-Themen 8
M html aus aktuellem Browserfenster mitlesen lassen Allgemeine Java-Themen 5
T Kann HTML Datei nicht lesen Allgemeine Java-Themen 3
S HTML-Quelltext nach bestimmter Stelle durchsuchen Allgemeine Java-Themen 2
B HTML Tags in Strings umwandeln Allgemeine Java-Themen 4
S BufferedReader/PrintWriter an einer HTML Allgemeine Java-Themen 6
T HTML Tag Position mittels Pattern ermitteln Allgemeine Java-Themen 7
C Attribute aus HTML Tags auslesen Allgemeine Java-Themen 6
M Wicket Html Allgemeine Java-Themen 2
S Fehler beim ausführen des HTML Allgemeine Java-Themen 7
S Fehler Applet-HTML Allgemeine Java-Themen 5
B suchfunktion in html integrieren Allgemeine Java-Themen 3
DEvent Wieso ist Javadoc mit Html Tags? Allgemeine Java-Themen 47
P RegEx mit HTML Parser für Java möglich? Allgemeine Java-Themen 10
B RTF zu HTML Allgemeine Java-Themen 3
S Von HTML-Seite den Titel bekommen Allgemeine Java-Themen 2
M .jar in HTML einbinden Allgemeine Java-Themen 5
H Kleiner HTML Parser (Facharbeit) Allgemeine Java-Themen 11
K iText, HTML Einrückung im Document, aber nicht im Paragraph Allgemeine Java-Themen 3
J Überprüfen ob URL eine HTML Datei referenziert Allgemeine Java-Themen 4
E Zeilenumbruch html Allgemeine Java-Themen 3
J URLs aus HTML Datei extrahieren Allgemeine Java-Themen 2
W Java Anwendung in HTML Allgemeine Java-Themen 2
M Html Unit Whitespace-Problem Allgemeine Java-Themen 4
J HTML-Sonderzeichen ersetzen Allgemeine Java-Themen 2
M HTML-Websiten verarbeiten Allgemeine Java-Themen 8
A Index Datei aus HTML-Dateien Allgemeine Java-Themen 7
S HTML => DOM - Welcher Parser für meine Zwecke? Allgemeine Java-Themen 3
I HTML Seite laden Allgemeine Java-Themen 6
W Saubere Lösung für das Auslesen einer Html Seite (Mehrsprachigkeit) Allgemeine Java-Themen 5
M String in Html Text umwandeln Allgemeine Java-Themen 2
S Formatierungen aus HTML-Dokument übernehmen und in Word docx schreiben Allgemeine Java-Themen 3
E HTML File mit Umlaute einlesen Allgemeine Java-Themen 8
T HTML Parser Allgemeine Java-Themen 7
E Regex HTML Tag und Inhalt löschen Allgemeine Java-Themen 4
S Swing mit JEditorPane per HTML auf Bilder in JAR zugreifen. Allgemeine Java-Themen 3
S Regulärer Ausdruck für HTML-Tag Allgemeine Java-Themen 18
H Java Methode zum HTML encodieren/decodieren Allgemeine Java-Themen 2
Daniel_L Bug in Copy-Funktion bei HTML-Editorpane? Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben