Hi!
Ich würde euch gerne mal bei folgendem Problem um Hilfe bitten:
Und zwar habe ich für meine Lernplattform im Entwicklungsmodus eine Log-Ansicht, wo alles, was das Programm so tut, reingeschrieben wird. Für eine bessere Übersicht färbe ich die einzelnen Einträge mit HTML ein. Das zieht aber nach sich, das normale Zeilenumbrüche (\r\n) einfach ignoriert werden. Also versuche werden alle solchen Zeichen per replace() durch einen HTML-Zeilenumbruch (<br />) ersetzt. Da in das Log auch alle VM-Fehler geschrieben werden, habe ich keinen Einfluss auf die Art der Zeilenumbrüche und muss sie eben mit genannter Methode anschließend konvertieren.
Wenn ich das mache, dann passiert bei folgendem Code nichts:
Bei folgendem Code wird zwar etwas angezeigt (auch so, wie es sein soll), jedoch erhalte ich manchmal (merkwürdigerweise jedoch nicht jedes mal) eine Fehlermeldung:
Die Fehlermeldung dazu ist folgende:
Die gesamte LogViewer-Klasse sieht wie folgt aus:
Habt ihr da eine Idee, woran das liegen könnte? Wäre super, wenn ihr dafür eine Lösung habt!
Ich würde euch gerne mal bei folgendem Problem um Hilfe bitten:
Und zwar habe ich für meine Lernplattform im Entwicklungsmodus eine Log-Ansicht, wo alles, was das Programm so tut, reingeschrieben wird. Für eine bessere Übersicht färbe ich die einzelnen Einträge mit HTML ein. Das zieht aber nach sich, das normale Zeilenumbrüche (\r\n) einfach ignoriert werden. Also versuche werden alle solchen Zeichen per replace() durch einen HTML-Zeilenumbruch (<br />) ersetzt. Da in das Log auch alle VM-Fehler geschrieben werden, habe ich keinen Einfluss auf die Art der Zeilenumbrüche und muss sie eben mit genannter Methode anschließend konvertieren.
Wenn ich das mache, dann passiert bei folgendem Code nichts:
Java:
entry.replace("\r\n", "<br />")
Bei folgendem Code wird zwar etwas angezeigt (auch so, wie es sein soll), jedoch erhalte ich manchmal (merkwürdigerweise jedoch nicht jedes mal) eine Fehlermeldung:
Java:
entry.replace("\r\n", "\r\n<br />")
Die Fehlermeldung dazu ist folgende:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
at javax.swing.text.BoxView.getOffset(BoxView.java:1084)
at javax.swing.text.BoxView.childAllocation(BoxView.java:678)
at javax.swing.text.CompositeView.getChildAllocation(CompositeView.java:215)
at javax.swing.text.BoxView.getChildAllocation(BoxView.java:436)
at javax.swing.plaf.basic.BasicTextUI$UpdateHandler.calculateViewPosition(BasicTextUI.java:1979)
at javax.swing.plaf.basic.BasicTextUI$UpdateHandler.layoutContainer(BasicTextUI.java:1955)
at java.awt.Container.layout(Container.java:1421)
at java.awt.Container.doLayout(Container.java:1410)
at java.awt.Container.validateTree(Container.java:1507)
at java.awt.Container.validateTree(Container.java:1513)
at java.awt.Container.validateTree(Container.java:1513)
at java.awt.Container.validate(Container.java:1480)
at javax.swing.RepaintManager.validateInvalidComponents(RepaintManager.java:669)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:124)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Die gesamte LogViewer-Klasse sieht wie folgt aus:
Java:
package debug;
import java.util.TimerTask;
public class LogViewer extends TimerTask {
private int count = 0;
private int level = 3;
public LogViewer(int level)
{
this.level = level;
slern.Schnecken_Lernprogramm.eventLogTP
.setText("<html><body></body></html>");
}
@Override
public void run()
{
final int size = LoggingSystem.getLogSize();
if (size > count)
{
int i = count;
for (; i < size; i++)
{
final String entry = LoggingSystem.getLogEntry(i);
final String subStr = entry.substring(15);
String color = null;
int currentLevel = 0;
// Grad des Fehlers und Farbe festlegen
// ANMERKUNG: Auf Level 0 muss nicht geprüft werden, das ist die
// Standardeinstellung
if (subStr.startsWith("FEHLER:"))
{
currentLevel = 1;
color = "FF7F00";
}
else if (subStr.startsWith("WARNUNG:"))
{
currentLevel = 2;
color = "FFE500";
}
else if (subStr.startsWith("INFO:"))
{
currentLevel = 3;
color = "00E500";
}
else
color = "FF0000";
System.out.println(subStr);
if (currentLevel <= level)
{
// Neuen Text für Anzeige generieren und setzen
final String oldText = slern.Schnecken_Lernprogramm.eventLogTP
.getText();
slern.Schnecken_Lernprogramm.eventLogTP.setText(oldText
.substring(0, oldText.length() - 14)
+ "<font color=\"#"
+ color
+ "\">"
+ (i + 1)
+ ": "
+ entry.replace("\r\n", "\r\n<br />")
+ "</font><br /></body></html>");
}
}
count = i;
}
}
/**
* Stellt das Level ein, ab dem Fehler aus dem Log auch in der JTextPane
* angezeigt werden
*
* @param level
* Das Level, ab dem Fehler angezeigt werden
*/
public void setLevel(int level)
{
if (level < 0 || level > 3)
throw new IllegalArgumentException("Level out of range.");
this.level = level;
}
}
Habt ihr da eine Idee, woran das liegen könnte? Wäre super, wenn ihr dafür eine Lösung habt!
Zuletzt bearbeitet: