TimerTask - jak używać, tworzyć?

0

Witam,
zaczynam dopiero programować w Javie i mam problem odnośnie do TimerTask. Nie mam pojęcia jak go użyć?
Stworzyłam sobie Timer który co 5 sekund ma wywoływać ruch, kod wygląda tak:

Timer czas = new Timer();
czas.schedule(ruch, 0, 5000); 

Teraz nie wiem jak utworzyć TimerTask ruch :(

0

TimerTask to klasa implementująca interfejs Runnable, czyli wystarczy stworzyć własną klasę, która będzie rozszerzać TT i zaimplementować metodę run(). Straszny trup, ale już o tym było > http://4programmers.net/Forum/Java/89240-Java_-_klasa_Timer_i_TimerTask

0

przejrzałam ten temat zanim napisałam swojego posta i niestety nie pomogło ;/ napisałam program który powinien przesuwać kwadrat, niestety po uruchomieniu nic się nie dzieje

import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JButton;
import javax.swing.JFrame;

public class MojTimer extends JFrame {
	
	JButton klocek;
	int y = 10;
	
	public MojTimer() {
		
		setSize(400,400);
		setLayout(null);
		
		klocek = new JButton();
		klocek.setBounds(10, y, 20, 20);
		add(klocek);
		
	}
	
	class Zadanie extends TimerTask {

		
		public void run() {
		
			klocek.setBounds(10, y = y + 10, 20,20 );
			
		}


	    
	} 
	
	public static void main(String[] args) {
		
		MojTimer okno = new MojTimer();
		okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		okno.setVisible(true);
		
		Timer czas = new Timer();
		MojTimer.Zadanie ruch = (new MojTimer()).new Zadanie();
		czas.schedule(ruch, 0, 1000);
		
		
	}
	
	
} 
0

A tu jest inny problem. Zmienna y jest inkrementowana, ale kwadrat nie jest przesuwany ponieważ nie jest wywolywana metoda setBounds(). Sama zmiana wartości y nie powoduje zmiany położenia klocka.

0

tzn.? jak to nie jest wywoływana?
?
kod nadal nic nie robi

1

Brakuje

repaint();
0

niestety kwadrat nadal się nie porusza, ale tak jak zauważył Koziołek y jest inkrementowany

1
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JButton;
import javax.swing.JFrame;

public class MojTimer extends JFrame {

	JButton klocek;
	int y = 10;
	private static MojTimer okno;

	public MojTimer() {

		setSize(400, 400);
		setLayout(null);

		klocek = new JButton();
		klocek.setBounds(10, y, 20, 20);
		add(klocek);

	}

	class Zadanie extends TimerTask {

		public void run() {
			y = y + 10;
			klocek.setBounds(10, y, 20, 20);
		}

	}

	public static void main(String[] args) {

		okno = new MojTimer();
		okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		okno.setVisible(true);

		Timer czas = new Timer();
		MojTimer.Zadanie ruch = okno.new Zadanie(); // <<<<<<< tu jest babol
		czas.schedule(ruch, 0L, 1000L);
	}

}

jeżeli klasa wewnętrzna, nie statyczna, jest tworzona z innego obiektu niż ten w którym chcemy jej używać to nic dziwnego, że nie działa.

0

dzięki za pomoc :)

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