Hallo und guten Abend (oder besser Morgen ) zusammen,
ich habe ein kleines Problem mit einer meiner Übungen zu Java.
Folgendes ist zu tun:
In einem Fenster soll sich ein Kreis animiert bewegen. Realisiert ist das Ganze durch einen Thread! Hier ein Codeschnipsel ....
/**
* Die run-Methode des Threads Hier wird die Animation ausgeführt.
* run() wird indirekt durch start() aufgerufen. Darf niemals direkt auf
* gerufen werden.
*/
public void run() {
Leinwand leinwand = Leinwand.gibLeinwand();
int breite = leinwand.gibBreite();
int hoehe = leinwand.gibHoehe();
beendet = false;
if(!istSichtbar) sichtbarMachen();
while (!beendet) {
// Ggf. an der Wand reflektieren, neue Position berechnen.
if(xPosition + durchmesser + dx > breite || xPosition + dx < 0) dx = -dx;
if(yPosition + durchmesser + dy > hoehe || yPosition + dy < 0) dy = -dy;
xPosition += dx;
yPosition += dy;
zeichnen(); // neu zeichnen
}
}
/**
* Animation anhalten
*/
public void anhalten() {
beendet = true;
}
Wir sollen nun realisieren, dass man den Thread mittels wait() und notify() anhält bzw. weiter laufen läßt! Ich habe schon mehrere Ansätze versucht aber ich komme nicht weiter bzw. finde meinen Fehler nicht ;(
Hier mal mein Ansatz:
public synchronized void anhalten()
{
synchronized(this)
{
try
{
wait();
}
catch(InterruptedException e)
{
}
}
}
public synchronized void fortsetzen()
{
synchronized(this)
{
notify();
}
}
Sobald ich anhalten() aufrufe komme ich in eine Endlosschleife .... kann mir jemand helfen?
ich habe ein kleines Problem mit einer meiner Übungen zu Java.
Folgendes ist zu tun:
In einem Fenster soll sich ein Kreis animiert bewegen. Realisiert ist das Ganze durch einen Thread! Hier ein Codeschnipsel ....
/**
* Die run-Methode des Threads Hier wird die Animation ausgeführt.
* run() wird indirekt durch start() aufgerufen. Darf niemals direkt auf
* gerufen werden.
*/
public void run() {
Leinwand leinwand = Leinwand.gibLeinwand();
int breite = leinwand.gibBreite();
int hoehe = leinwand.gibHoehe();
beendet = false;
if(!istSichtbar) sichtbarMachen();
while (!beendet) {
// Ggf. an der Wand reflektieren, neue Position berechnen.
if(xPosition + durchmesser + dx > breite || xPosition + dx < 0) dx = -dx;
if(yPosition + durchmesser + dy > hoehe || yPosition + dy < 0) dy = -dy;
xPosition += dx;
yPosition += dy;
zeichnen(); // neu zeichnen
}
}
/**
* Animation anhalten
*/
public void anhalten() {
beendet = true;
}
Wir sollen nun realisieren, dass man den Thread mittels wait() und notify() anhält bzw. weiter laufen läßt! Ich habe schon mehrere Ansätze versucht aber ich komme nicht weiter bzw. finde meinen Fehler nicht ;(
Hier mal mein Ansatz:
public synchronized void anhalten()
{
synchronized(this)
{
try
{
wait();
}
catch(InterruptedException e)
{
}
}
}
public synchronized void fortsetzen()
{
synchronized(this)
{
notify();
}
}
Sobald ich anhalten() aufrufe komme ich in eine Endlosschleife .... kann mir jemand helfen?