Veröffentlicht 8. Juli 200223 j Hallo zusammen, ich bekomme beim Stoppen eines Threads, mit threadname.interrupt(), diesen Fehler: java.lang.Error: Interrupted attempt to aquire write lock at javax.swing.text.AbstractDocument.writeLock(AbstractDocument.java:1346) at javax.swing.text.AbstractDocument.insertString(AbstractDocument.java:699) at javax.swing.text.PlainDocument.insertString(PlainDocument.java:114) at javax.swing.JTextArea.append(JTextArea.java:465) at LoeschenThread$LeereVerzeichnisse.loescheDatei(LoeschenThread.java:393) at LoeschenThread$LeereVerzeichnisse.leseQuellVerzeichnis(LoeschenThread.java:366) at LoeschenThread$LeereVerzeichnisse.leseQuellVerzeichnis(LoeschenThread.java:362) at LoeschenThread$LeereVerzeichnisse.leseQuellVerzeichnis(LoeschenThread.java:362) at LoeschenThread$LeereVerzeichnisse.beginne(LoeschenThread.java:349) at LoeschenThread.verzeichnis(LoeschenThread.java:89) at LoeschenThread.run(LoeschenThread.java:54) Ich frage im Thread mit if (this.isInterrupted()) ab, ob der Thread abgebrochen wurde, wenn ja sollte er einen Text in einem JTextArea anhängt! Hoffe, dass mir jemand von helfen kann!! MfG Dalton
12. Juli 200223 j das ist schwierig weil der ein biserl lang is aber im prinzip läufst so ab: class Klasse1 { //started den Thread private void startThread(){ name.start(); } //beendet den Thread //wird zu einer beliebigen Zeit //nach Button-Klick aufgerufen private void beendetThread(){ name.interrupt(), } } class Klasse2 extends Thread{ public void run() { ...einige jtextArea.append(). methode1(); ...einige jtextArea.append(). } private void methode1() { while(true){ ... if (this.isInterrupted()) return; ... } } } [/PHP] Und noch was, der Fehler tritt nicht immer auf wenn ich den Thread abbreche, sondern nur gelegentlich.
12. Juli 200223 j Hallo, also ich würde das so machen. class Klasse1 { //started den Thread private void startThread(){ name.start(); } //beendet den Thread //wird zu einer beliebigen Zeit //nach Button-Klick aufgerufen private void beendetThread(){ name.setStatus(false); } } class Klasse2 extends Thread{ privat boolean status = true; public void setStatus(boolean { status = b; } public void run() { ...einige jtextArea.append(). methode1(); ...einige jtextArea.append(). } private void methode1() { while(status==true){ } } } [/PHP] Gruß Jaraz
12. Juli 200223 j Nicht ganz, aus de.comp.lang.java newsgroup da zu faul zum tippen. LINK ----- interrupt tut prinzipiell zwei Dinge je nach Zustand (steht auch in der APIDoc->RTFM): 1) Innerhalb eines wait-Prozesses durch wait/sleep/join wird dieser beendet, einer InterruptetException geworfen und der interrupted-Status geloescht. 2) Ausserhalb eines solchen Prozesses, also im "normalen" Betrieb, wird der interrupted-Status gesetzt. Nicht mehr. Kein mystischen stoppen des Threads. Auf die Statusaenderung zu reagieren bleibt dem Implementor des konkreten Threads ueberlassen. ----- Die Art die ich gepostet habe, läßt einen sleep Abschnitt erst zuende laufen und beendet dann den Thread. Es kommt also zu keiner Exception. Was bei dir jetzt besser geeignet ist, musst du entscheiden. :-) Gruß Jaraz
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.