Praktikum GUI-Threads
Ziel
Praktischer Einsatz von mehreren Threads unter Nutzung einer GUI. Am Beispiel einer Stoppuhr werden Probleme mit (langlaufenden) Threads und GUI aufgezeigt und gelöst.
Aufgabe
Eine grafische Stoppuhr soll die Zeitmessung mittels Start- und Stopp-Taste ermöglichen. Die periodische Aktualisierung der Anzeige soll mittels eines langlaufenden Threads realisiert werden. Dabei ist zu beachten, dass ein Zugriff auf die GUI nur mittels GUI-Thread erlaubt ist. Realisiert werden kann dies unter Zuhilfenahme der Methode EventQueue.invokeLater(), welche den peridischen UpdateRequest im GUI-Tread auslöst.
Funktionalität:
Die Anzeige soll aus den verstrichenen Sekunden und Millisekunden bestehen. Funktion der Tasten:
- Start
- Beginn der Zeitmessung
- Stopp
- Zeitmessung anhalten
- Null
- Uhr auf Null zurücksetzen
- Ende
- Programmende
Programmaufbau
Klassenstruktur:
- ClockManager: Initialisierung
- ClockModel: Geschäftslogik (Speicherung der Startzeit)
- ClockView: Anzeige / Bedienung (UI)
- ClockPresenter: Vermittlung View - Model
- Ticker (Thread)
- UpdateRequest
Programmrahmen
Klassendiagramm
classDiagram
direction BT
class Clock {
+ getTime() long
+ reset() void
}
class ClockPresenter {
+ setModelAndView(Clock, ClockView) void
+ actionPerformed(ActionEvent) void
}
class ClockView {
+ showTime(long) void
- initView() void
}
class Ticker {
+ run() void
}
class UpdateRequest {
+ run() void
}
ClockPresenter "1" --> "1" Clock: EDT
ClockPresenter "1" o--> "1" ClockView: EDT
ClockPresenter ..> Ticker : «create»
ClockPresenter "1" *--> "1" Ticker : EDT
ClockView "1" o--> "1" ClockPresenter: EDT
Ticker "1" *--> "1" UpdateRequest: TT
Ticker ..> UpdateRequest : «create»
UpdateRequest "1" --> "1" Clock : EDT
UpdateRequest "1" o--> "1" ClockView: EDT
Fakultativ
Letzte Änderung: 28. April 2023 18:18