Bei der Verwendung von Thread.sleep() in Java Swing-Anwendungen kann es zu unerwartetem Verhalten, wie z Die Benutzeroberfläche friert ein oder reagiert nicht mehr. Dies liegt daran, dass Thread.sleep() die Ausführung des Event Dispatch Thread (EDT) anhält, des Threads, der Swing-Komponenten rendert. Infolgedessen kann das EDT keine Ereignisse verarbeiten und die Benutzeroberfläche nicht aktualisieren, was dazu führt, dass sie eingefroren erscheint.
Im bereitgestellten Codeausschnitt wird mit Thread.sleep(1000*5) eine Schleife erstellt, um eine Prüfung auszuführen stündlich. Leider versetzt der Thread.sleep()-Aufruf den EDT in den Ruhezustand, einschließlich der Swing-Komponenten. Dadurch wird verhindert, dass die Benutzeroberfläche aktualisiert wird oder auf Benutzereingaben reagiert.
Um dieses Problem zu beheben, können wir stattdessen einen javax.swing.Timer verwenden. Ein Timer ermöglicht die Planung von Aufgaben, die unabhängig vom EDT regelmäßig ausgeführt werden sollen. Dies ermöglicht die regelmäßige Aufgabenausführung, ohne die Reaktionsfähigkeit der Benutzeroberfläche zu beeinträchtigen.
Hier ist eine aktualisierte Version des Codes mit einem Timer:
Timer t = new Timer(1000 * 5, new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Execute the check
// Update the UI with the check results
}
});
t.start(); // Start the timer
Der Timer führt die geplante Aufgabe (die Prüfung) alle fünf Sekunden aus, ohne den EDT zu blockieren. Die Benutzeroberfläche bleibt während der Durchführung der Prüfungen reaktionsfähig und für den Benutzer verfügbar. Die Prüfergebnisse können dann im UI innerhalb des ActionListener angezeigt werden.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3