Ich suche verzweifelt ein gutes Tutorial bzw. Beispielcode für
das javax.management.timer-API. Ich will damit eine Uhr
programmieren, die jede Sekunde um 1 herunterzählt (geht das
auch ohne das Timer-Interface, aber möglichst ohne wait(…)?)
Wieso nimmst du denn dazu die Management-API her? Einen Timer gibts doch bereits ganz normal im java.util-Paket.
Du erstellst einfach einen Timer (Klasse java.util.Timer). Dann noch einen TimerTask (dort musst du die run()-Methode implementieren) und dann startest du den Timer mit der schedule()-Methode.
Dann wir die run()-Methode so oft und in solchen Intervallen ausgeführt, wie du es angegeben hast.
Beispiel-Code das Uhrzeit anzeigt:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class TimerTest extends JFrame {
// Label zur Anzeige der aktuellen Uhrzeit im Fenster
private JLabel label = new JLabel();
public TimerTest() {
// Fenster initialisieren
this.setSize(140,80);
this.setDefaultCloseOperation(JFrame.EXIT\_ON\_CLOSE);
this.add(label);
}
public void startTimer() {
// Erstelle den Timer
Timer t = new Timer("Timer-Thread", true);
// Erstelle den Timer-Task als innere Klasse
TimerTask task = new TimerTask() {
public void run() {
// Dies wird jedesmal ausgefuehrt, wenn der Timer anschlaegt:
// Wir schreiben die aktuelle Uhrzeit ins Fenster
DateFormat format = new SimpleDateFormat("hh:mm:ss");
setText(format.format(new Date()));
}
};
// Starte den Timer sofort mit Intervall 1000ms
t.schedule(task, 0, 1000);
}
public void setText(String text) {
// Setzt den Text im Fenster und gibt ihn auch auf der Konsole aus
label.setText(text);
System.out.println(text);
this.validate();
}
public static void main(String[] argv) {
// Main-Methode: Erstellt Fenster und startet Timer
TimerTest timerTest = new TimerTest();
timerTest.setVisible(true);
timerTest.startTimer();
}
}