Wie lassen sich Threads mit Hilfe des Interfaces Runnable
realisieren?
Generell muss folgendermaßen vorgegangen werden:
- Thread-Objekt erzeugen
- Thread.start() aufrufen
- die Methode run() wird durch den gestarteten Thread ausgeführt
Die Klasse Digitaluhr wird von JPanel
abgeleitet. Zur
Darstellung wird eine Instanz in main()
einem JFrame
hinzugefügt.
Eine das Interface Runnable implementierende
Klasse muss die parameterlose Methode run()
enthalten.
Sie wird dann aufgerufen, wenn eine Runnable
implementierende Klasse ein Thread-Objekt bildet. Hier wird in ihr
zunächst ein Date-Objekt gebildet. Dies gibt das aktuelle Datum
nebst Zeitangabe aus, was anschließend auf einem JLabel
dargestellt wird. In der Folge ruht der aktive Thread für genau
eine Sekunde. Anschließend wird wiederum ein neues Date-Objekt
gebildet.
Der ausführende Thread
selber wird
über eine Methode start()
bereits im Konstruktor
gebildet und mittels Thread.start()
auch gestartet.
import java.awt.Font;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Digitaluhr extends JPanel implements Runnable {
private static final long serialVersionUID = 1L;
private JLabel label;
private Date date;
private Font font = new Font("Verdana", Font.PLAIN, 20);
private Thread thread;
public Digitaluhr() {
label = new JLabel();
label.setFont(font);
this.add(label);
start();
}
private void gibDate() {
label.setText(date.toString());
}
public void start() {
if (thread == null) {
thread = new Thread(this);
thread.start();
}
}
public void run() {
while (true) {
date = new Date();
gibDate();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Digitaluhr c = new Digitaluhr();
JFrame f = new JFrame();
f.add(c);
f.setSize(350, 60);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.