# Thread unterbrechen



## sirair (6. Jun 2006)

Hi,
Ich möchte, wenn man auf Taste p drückt der Ball pausiert und bei einem erneuten Tastendruck sie wieder weiterläuft. Ich habe es zwar mit wait() und notify() wie unten versucht, aber es läuft nicht. 
Wie ist es denn richtig? Danke.


```
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class Ballbewegung1 extends Applet implements Runnable, KeyListener
{
// Initialisierung der Variablen
int x_pos = 10; // x - Position des Balles
int y_pos = 100; // y - Position des Balles
int radius = 20; // Radius des Balles
private boolean paused=false;
private Object pauseMonitor=new Object();

public void init()
{
addKeyListener(this);
}

public void keyTyped(KeyEvent e) {
if(e.getKeyChar() == 'p'){
if(paused) {
synchronized (pauseMonitor) {
pauseMonitor.notify();
}
} else {
paused=true;
}
}
}
public void keyReleased(KeyEvent e){}
public void keyPressed(KeyEvent e) {}


public void start ()
{

// Schaffen eines neuen Threads, in dem das Spiel läuft
Thread th = new Thread (this);
// Starten des Threads
th.start ();
}
public void run ()
{
Thread.currentThread().setPriority(Thread.MIN_PRIORITY) ;

while(true) {
x_pos ++;
repaint();
if(paused) {
synchronized (pauseMonitor) {
try {

pauseMonitor.wait();

Thread.sleep (10);

} catch (InterruptedException e) {}
}
paused=false;
}

Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
}
}

public void paint (Graphics g)
{
g.setColor (Color.red);

g.fillOval (x_pos - radius, y_pos - radius, 2 * radius, 2 * radius);
}

}
```


----------



## Soulfly (6. Jun 2006)

Ist auch richtig, dass es nicht so gut funktioniert! Außerdem möchtest du ja deine Spielschleife gerne beibehalten, oder?

Erstell doch einfach eine while(nochPause) Schleife in der keine Spieloperationen, außer der anzeige vllt, gemacht werden. So wird es am häufigsten gelöst und ist einfach umzusetzen.

MfG
Soulfly


----------



## sirair (6. Jun 2006)

Wie kann man es, so wie du meinst mit der selben Taste[p] realisieren?


----------



## Soulfly (6. Jun 2006)

nunja mit nem Keylistener eine boolean steuern

p drücken --> nochPause = true;

... 

while (nochPause){
   //nichtvieltun
}

p drücken --> nochPause = false;

und weiter


----------

