Dalton Geschrieben 8. Juli 2002 Geschrieben 8. Juli 2002 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 Zitieren
Badgott Geschrieben 11. Juli 2002 Geschrieben 11. Juli 2002 hmm kanste vieleicht ne biserl mehr quell text posten? THX Badgott Zitieren
Dalton Geschrieben 12. Juli 2002 Autor Geschrieben 12. Juli 2002 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. Zitieren
Jaraz Geschrieben 12. Juli 2002 Geschrieben 12. Juli 2002 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 Zitieren
Dalton Geschrieben 12. Juli 2002 Autor Geschrieben 12. Juli 2002 Aber müsste das nicht vom Prinzip her das gleiche sein? Dank dir, Dalton Zitieren
Jaraz Geschrieben 12. Juli 2002 Geschrieben 12. Juli 2002 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 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.