Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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.

Geschrieben

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

Geschrieben

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...