Kann Thread nicht richtig beenden.

Status
Nicht offen für weitere Antworten.
W

w00dy

Gast
Hallo!

Ich habe eine Threadklasse in der ich ein panel immer neu repainte, hier der Code dazu:
Code:
public class MyThread extends Thread{
	private MyPanel panel;
	private boolean stop;
	
	public SnakeMoving(MyPanel panel){
		this.panel = panel;
	}
	
	public void run(){
			while(!stop){
				panel.repaint();
				try{
					sleep(200);
				}catch(Exception e){
				}
			}
	}
	
	public void cancel(){
		stop = true;
	}
}

Zusätzlich habe ich noch eine zweite Klasse MyPanel, in der ich per überschreiben der Methode paint() Grafische (bewegte) Objekte hinzufüge wie z.B. Rechtecke.

Diese Rechtecke können gesteuert werden mit den Pfeiltasten. Wenn ein Rechteck jetzt den Rand berührt, dann soll in einem JOptionPane "Game Over" ausgegeben werden und der Thread gestoppt werden.
Hier der Auszug aus der MyPanel-Klasse, bei dem abgebrochen werden sollte:
Code:
if(x < 0 || y < 0 || x >= getWidth()-10 || y >= getHeight()){
			thread.cancel();
			JOptionPane.showMessageDialog(null,"Game Over!"
											+"\nSie haben "+score+" Punkte erreicht.");
		}

Nun ist es so, dass wenn ein Rechteck beispielsweise den Rand berührt, wird zwar "Game Over" in einem JOptionPane angezeigt, aber es wird irgendwie weiterhin immerwieder neugezeichnet (Das JOptionPane), denn wenn ich auf OK drücke, passiert nicht viel, denn es wird weiterhin angezeigt (bzw. neu gezeichnet). Ich denke dass der Thread nicht richtig beendet wird, sondern irgendwie weiterläuft oder ähnlich.
 
G

Gelöschtes Mitglied 5909

Gast
gugg mal in die API
interrupt()
isInterrupted()
interrupted()
 
W

w00dy

Gast
Mit folgendem Methodenaufruf setze ich die Variable "stop" sowieso auf false, damit wird das panel.repaint() im Thread nicht weiter ausgeführt:
Code:
thread.cancel

Ich habe nun herausgefunden, dass zwar das panel.repaint() im thread nicht weiter ausgeführt wird. Jedoch irgendwie die JOptionPane Message nonstop repaintet wird....

Weiß einer woran das liegt? Ich bitte um Hilfe.
 

Leroy42

Top Contributor
w00dy hat gesagt.:
Jedoch irgendwie die JOptionPane Message nonstop repaintet wird....

...was widerum nur heißen kann, daß deine if-Abfrage (if (x<0 || y<0...) selbst andauernd
aufgerufen wird.

Steckt die denn ebenfalls in einem seperatem Thread? ???:L
 
G

Guest

Gast
Nein es steckt alles im selben Thread, und daher dachte ich, dass ich mithilfe von:
Code:
thread.cancel();

Den Thread dazu bringe, dass er mir das nicht nonstop repaintet....aber anscheined klappt es nicht =(
 

Leroy42

Top Contributor
Es kann nicht im selben Thread stehen, da du desse run-Methode ja gepostet hast.

Wo genau steht denn dein Abfrage
Code:
  if (x<0 || y<0...)
und wann wird sie aufgerufen?

Wenn einmal die Bedingung erfüllt ist, aber die Abfrage ständig
weiter durchgeführt wird, ergibt sich halt der wiederholte Aufruf
von JOptionPane
 
G

Guest

Gast
Die Abfrage steht in der "MyPanel" klasse, innerhalb der paint() Methode...
 

Leroy42

Top Contributor
Na dann ist doch alles klar! :D

1. Die paint-Methode wird vom System aufgerufen
2. Die JOptionPane geöffnet und verdeckt dein Panel
3. Die JOptionPane wird geschlossen und deshalb muß das Panel neu gezeichnet werden
4. Weiter bei 1. :cool:

Nimm die Abfrage aus der paint-Methode raus und schreibe sie dorthin,
wo die Steuereung erfolgt.
 
G

Guest

Gast
DANKE!
Ich werde das programm neu strukturieren müssen, da ich in der Paint methode auch die steuerung drinnen habe usw...
 

Leroy42

Top Contributor
Anonymous hat gesagt.:
da ich in der Paint methode auch die steuerung drinnen habe usw...

Wie hast du das denn geschafft? :shock: :autsch:

Für die Steuerung mußt du doch sowieso KeyListener verwenden, die
außerhalb jeder Methode stehen. ???:L
 
G

Guest

Gast
Achso das meinst du, ja und der KeyListener ist in einer anderen Klasse...in der Frame klasse^^
 

Leroy42

Top Contributor
Nein der KeyListener wird schon in der Klasse deklariert, wo der KeyEvent
ihn benachrichtigen soll.

Ich meine nur, daß der Code von z.B. keyPressed(KeyEvent e) {...} eben nicht
Bestandteil einer Methode ist sondern, gewissermaßen, selbständig.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Thread tickt nicht richtig Java Basics - Anfänger-Themen 4
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
T Threads Neuen Thread nicht aus main-Methode starten Java Basics - Anfänger-Themen 3
P Threads Im Dialog geöffneter Thread zeichnet nicht Java Basics - Anfänger-Themen 4
J Thread interrupt funktioniert nicht Java Basics - Anfänger-Themen 5
R Threads ArrayList in Thread nicht modifizierbar? Java Basics - Anfänger-Themen 22
B Thread will nicht starten Java Basics - Anfänger-Themen 10
U Thread reagiert nicht sofort auf Tastendruck Java Basics - Anfänger-Themen 14
El_Lobo Threads bekomme Thread nicht abgewürgt mit interrupted() Java Basics - Anfänger-Themen 3
C Warum wird der Thread nicht beendet ? Java Basics - Anfänger-Themen 7
G Thread beendet nicht Java Basics - Anfänger-Themen 6
sylo Bekomme Thread nicht gleichzeitig gestartet. Java Basics - Anfänger-Themen 12
U THREAD stoppt bzw. schläft nicht!!!! Java Basics - Anfänger-Themen 12
A Trotz Thread ist Program nicht erreichbar Java Basics - Anfänger-Themen 3
L Thread oder Nicht-Thread in Ticker-Applet Java Basics - Anfänger-Themen 7
R Thread startet nicht, verstehe nicht warum Java Basics - Anfänger-Themen 2
G Methode nicht im Event-Dispatcher-Thread starten? Java Basics - Anfänger-Themen 2
M Simple Animation funktioniert nicht (JFrame, Canvas, Thread) Java Basics - Anfänger-Themen 6
B Thread will einfach nicht stoppen Java Basics - Anfänger-Themen 12
G nach Thread.start(); nochmal start(); aufrufen geht nicht Java Basics - Anfänger-Themen 4
G Mein erster Thread funktioniert nicht. Java Basics - Anfänger-Themen 3
7 Thread will nicht stoppen Java Basics - Anfänger-Themen 2
I Thread funktioniert nicht Java Basics - Anfänger-Themen 10
8 Wieso krieg ich den Thread nicht angehalten? Java Basics - Anfänger-Themen 2
Leyla Thread isInterrupt Java Basics - Anfänger-Themen 18
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
A Thread XML-Dateien zusammenfügen Java Basics - Anfänger-Themen 11
F influxdb Upload in eigenem Thread Java Basics - Anfänger-Themen 2
frager2345 Thread - Methoden synchronized deklarieren Java Basics - Anfänger-Themen 10
berserkerdq2 Größter unterschied von extends thread und implements runnable? Java Basics - Anfänger-Themen 2
T Thread beenden aus zweiter Klasse Java Basics - Anfänger-Themen 4
A Thread - Synchronized Java Basics - Anfänger-Themen 10
A Thread Producer - Consumer Java Basics - Anfänger-Themen 1
A Thread-Semhapore Java Basics - Anfänger-Themen 0
A Thread Exchanger Java Basics - Anfänger-Themen 22
A Thread-Cyclicbarrier Java Basics - Anfänger-Themen 4
B In einem Thread Endlosschleife beenden Java Basics - Anfänger-Themen 19
A Thread-Verklemmung Java Basics - Anfänger-Themen 10
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
A Thread find number Java Basics - Anfänger-Themen 8
F Thread.sleep() Java Basics - Anfänger-Themen 5
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
A Thread Java Basics - Anfänger-Themen 3
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
A Thread Java Basics - Anfänger-Themen 8
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
M Thread-Zustände Java Basics - Anfänger-Themen 6
CptK For-Schleife in Thread nach jedem Durchlauf pausieren Java Basics - Anfänger-Themen 35
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
B Endlosschleife Thread sauber beenden Java Basics - Anfänger-Themen 19
D Java Thread wartet nur ein mal Java Basics - Anfänger-Themen 1
D Java Thread wartet nur ein mal Java Basics - Anfänger-Themen 0
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
C Thread und TimerTask, Verstädnisproblem Java Basics - Anfänger-Themen 10
amgadalghabra Sorting Thread Launcher Java Basics - Anfänger-Themen 3
B Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
A Thread Java Basics - Anfänger-Themen 4
A Thread Java Basics - Anfänger-Themen 1
A Thread Java Basics - Anfänger-Themen 0
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 1
B Thread / Prozess stoppen? Java Basics - Anfänger-Themen 22
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
B Threads Thread sleep() Method einfache Frage Java Basics - Anfänger-Themen 8
W Thread Aufgabe - Vorgehensweise Java Basics - Anfänger-Themen 8
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 0
J Threads PrograssBar update während thread Java Basics - Anfänger-Themen 13
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
Spencer Reid JavaFX Memory Thread.sleep Java Basics - Anfänger-Themen 1
S Thread.sleep mit JProgressBar Java Basics - Anfänger-Themen 1
ralfb1105 Frage zu Thread Synchronisation mit wait() und notify() Java Basics - Anfänger-Themen 3
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
J JavaFX -> SocketIO -> Thread -> Update Label Java Basics - Anfänger-Themen 13
J Thread Handling Java Basics - Anfänger-Themen 9
A Problem mit Thread.sleep Java Basics - Anfänger-Themen 4
C Thread in Methode + raus aus der Schleife Java Basics - Anfänger-Themen 10
E Threads Thread in While-Schleife nur einmal starten Java Basics - Anfänger-Themen 2
F Daten von Thread an den aufrufenden zurückgeben Java Basics - Anfänger-Themen 22
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
B Thread Problem Java Basics - Anfänger-Themen 7
N KeyListener in Thread Java Basics - Anfänger-Themen 0
M Thread.sleep() Funktion Java Basics - Anfänger-Themen 1
W JLabel in Main aus Thread verändern. Java Basics - Anfänger-Themen 4
D Ausgeben welcher Thread gerade Arbeitet Java Basics - Anfänger-Themen 8
N Threads Thread-Fehler Java Basics - Anfänger-Themen 2
F Thread um Uhrzeit ausführen Java Basics - Anfänger-Themen 5
F Get/Post als eigener Thread mit Rückgabe Java Basics - Anfänger-Themen 5
J Exception in thread "main" Java Basics - Anfänger-Themen 1
F Thread der auf eine Queue wartet, sicher beenden Java Basics - Anfänger-Themen 4
B Animation mit Thread(s) Java Basics - Anfänger-Themen 23
I Thread.sleep (1000); Java Basics - Anfänger-Themen 1
M Threads Jede Klasse einem Thread zuweisen Java Basics - Anfänger-Themen 7
J Java Thread cancel() und wiederbeleben Java Basics - Anfänger-Themen 4
J BouncingBalls 1 Thread Java Basics - Anfänger-Themen 3
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
J Timer oder Thread programmieren ? Java Basics - Anfänger-Themen 10
fLooojava Laufender Thread | Boolean ändern Java Basics - Anfänger-Themen 9
T Thread Pool mit Work Stealing Java Basics - Anfänger-Themen 1
R Java Thread Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben