[błąd] Nieprawidłowe działanie stopera

0

Witam,

Dopiero zaczynam swoją przygodę z Javą i trochę (czytaj głównie) drogą modyfikacji, trochę wyobraźni stworzyłem taki oto kod:

<code = java > import java.applet.;
import java.awt.
;
import java.awt.event.*;

public class NewApplet extends Applet implements Runnable, MouseListener{
int x, y, a, b, width, height;
String napis;
Font fontTimesNewRoman;
boolean stopped;
Image img;
Graphics gDC, mDC;
public void init(){
x = 20;
y = 80;
a = 0;
b = 0;
width = getWidth();
height = getHeight();
fontTimesNewRoman = new Font("SansSerif", Font.BOLD, 36);
img = createImage(width, height);
mDC = img.getGraphics();
gDC = getGraphics();
}
public void start(){
stopped = false;
Thread thread = new Thread (this);
thread.start();
}
public void run(){
while (!stopped){
b++;
if (b > 9){
b -= 10;
a++;
}
napis = "";
napis += a + "." + b;
try {
Thread.sleep(100);
}
catch (InterruptedException e){}
mDC.clearRect(0, 0, width, height);
mDC.setFont(fontTimesNewRoman);
mDC.drawString(napis, x, y);
gDC.drawImage(img, 0, 0, this);
}
}
public void stop(){
stopped = true;
}
public void paint(Graphics gDC){
gDC.drawImage(img, 0, 0, this);
}
public void mouseClicked(MouseEvent e) {
stopped = !stopped;
}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
}


W moim mniemaniu program powinien odliczać czas, po czym zatrzymać jego odliczanie po naciśnięciu przycisku myszy i wznowić po ponownym kliknięciu. Niestety jedyne co potrafi to odliczanie, a ja nie wiem gdzie jest błąd w moim rozumowaniu i tutaj proszę po pomoc.
0

Dodaj gdzieś wewnątrz metody init()

addMouseListener(this);

to spowoduje, że obszar apletu będzie reagował na klikniecia myszy, pozwoli Ci to zatrzymać stoper.
Z powtórnym uruchomieniem bedzie gorzej, wg mnie cały aplet jest źle zaprojektowany do roli stopera.
(stopped=!stopped) nie wystarcza, pętla w metodzie run() już sie zakończyła.

0

Zapętliłem wszystko w run() w while (!stop) {...} i zmieniłem na:


public void mouseClicked(MouseEvent e) {
        stop = !stop;
    }

i jest jak chciałem. Wiem, że dobrego stopera nigdy a tego nie będzie, ale chciałem zrobić coś od siebie z obecnymi umiejętnościami i żeby działo, a nie było użyteczne. Dzięki za pomoc :-) kiedyś zrobię porządny stoper, ale to po kilku tygodniach nauki a nie dniach ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1