Document.insertString() zu langsam

B

ByeBye 224935

Hallo Zusammen

Ich habe ein Problem das ich nichtmal ansatzweise verstehe.

Also:
Ich habe ein JTextPane, dem ich über die methode insertString() Text in sein Documente hinzufüge. Nachdem ich den Text hinzufüge Kopiere ich per FileChannel Dateien. Allerdings wird der Text erst nach dem Kopiervorgang angezeigt.
(Das gesammte Programm läuft in 1em Thread).

Woran kanns liegen?
Ich habe hier noch ein Bisschen Code:
Java:
  public void copy(File in,File save){
    try{
      File out = new File(save.getAbsolutePath()+"/"+in.getName());             //Output File 
      [... Code Weggelassen...]
      [... Code Weggelassen...]
        outprint("\tKopiere ");
        impprint(in.getName());
        outprint(" nach ");
        impprint(save.getAbsolutePath());
        outprint(" .");
      [... Code Weggelassen...]
      FileChannel sourceChannel = new FileInputStream(in).getChannel();
      FileChannel destinationChannel = new FileOutputStream(out).getChannel();
      outprint(".");
      sourceChannel.transferTo(0, sourceChannel.size(),destinationChannel);
      outprint(".");
      sourceChannel.close();
      destinationChannel.close();
      outprintln("\tFertig!");
    }
    catch(Exception e){
       errprintln("KKJ\u25BAKopieren Fehlgeschlagen");
       errprintln("\t"+e);
    }
  }

Die methoden "outprint[ln]" "impprint[ln]" und "errprint[ln]" sind methoden die verschieden-Farbigen Text in das Document des JTextPane einfügen. outprint ist weiß, impprint (important) is gelb und errprint (error) ist rot.
 
(Das gesammte Programm läuft in 1em Thread).
Ich glaube, genau das ist das Problem. Der Kopiervorgang blockiert den UI-Thread, deswegen kann das JTextPane erst danach aktuallisiert werden. Ich würde einfach die copy() Methode in einen separaten Thread auslagern, etwa so:
Java:
new Thread(new Runnable() {
	public void run() {
		copy(in, save);
	}
}).start();

Grüße
Vincent
 
Zurück