[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:

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, botów: 0