JTextPane - setCaretPosition Problem

Hi,
wenn ich etwas in meine JTextPane schreibe, setze ich anschließend die Position mittels
Code:
textPane.setCaretPosition(textPane.getText().length());

Das funktioniert unter Linux auch alles wunderbar. Jetzt habe ich mal mein Programm unter Windows gestartet und bekomme folgende Fehlermeldung wenn ich etwas in das JTextPane schreibe.
Code:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: bad
osition: xxx(steht die Position drin)
        at javax.swing.text.JTextComponent.setCaretPosition(Unknown Source)
....
....
....
....

Hat einer ne Idee woran das liegen kann? Und warum kommt der Fehler nur unter Windows?
 
Gute Fragen... :)
Was passiert, wenn Du statt length() einfach length()-1 nimmst?

Übrigens gehört diese Frage eigentlich ins Swing-Unterforum. ;)
 
Zuletzt bearbeitet:
length()-1 habe ich nicht probiert, aber einfach - die länge des letzten Eintrages.
Also so:
Code:
textPane.setCaretPosition(textPane.getText().length()-text.length());

Der Effekt ist dann, dass beim Start keine Exception mehr geworfen wird. Wenn ich aber im laufe des Programmes die TextPane schnell mit vielen Zeilen fülle (vielleicht mal 20), dann wird die Exception ebenfalls wieder geworfen.

Kann es vielleicht in Richtung von Zeitproblemen gehen? Dazu muss ich sagen, dass ich auf dem selben Rechner teste.
 
Also ich kann mir nicht vorstellen, dass das Setzen der CaretPosition *nach* Einfügen des Textes auf die Position Textlänge - 1 nicht funktionieren soll.
 
Ich verstehe leider auch nicht warum es nicht funktioniert. Unter Linux habe ich die Exception ja nicht. Dann muss ich wohl einfach die Exception abfangen und nicht behandeln. Ist zwar keine schöne Lösung aber sonst kann man ja nichts machen.
 
Hallo,

habe das gleiche Problem mit der gleichen Codezeile:

Code:
textPane.setCaretPosition(textPane.getText().length());

Folgender Code sollte funktionieren:

Code:
textPane.setCaretPosition(textPane.getDocument().getLength());

Das Problem besteht darin, dass unter Windows die Textlänge anders ist! Folgenden Code habe ich ausgeführt:

Code:
System.out.println("text.length: " + textPane.getText().length());
System.out.println("getDocument.getLength: " + textPane.getDocument().getLength());

Ausgabe unter Linux:

text.length: 20
getDocument.getLength: 20

Ausgabe unter Windows:

text.length: 22
getDocument.getLength: 20
 
Zurück