Ich habe eine erweiterte Java-Anwendung (Financial Management
) für Desktop mit Swing entwickelt und ich habe einige Clients, die es verwenden. Kürzlich hat einer meiner Kunden gesagt, dass die Anwendung manchmal einfriert und er neu starten muss, wenn er viel daran arbeitet.
Das Problem ist, wenn ich die Anwendung auf meinem Gerät testen funktioniert gut und nicht einfrieren, auch wenn ich es mit einigen Aktionen und Daten überlasten!
Kann mir jemand einige Tipps geben, was die möglichen Dinge sind, die eine Swing-Java-Anwendung solche Dinge machen können und wie ich die Leistung meiner Anwendung verbessern kann.Verbesserte Java-Anwendung
Antwort
Es kann viele Ursachen haben. Meine erste Schätzung wäre eine race condition irgendwo in Ihrem Code. Eine interessante Tatsache ist, wenn die Anwendung 0% CPU-Zeit oder 100% CPU-Zeit verwendet, während sie eingefroren erscheint. 0% würde anzeigen, dass einige Dinge aufeinander warten (Deadlock). 100% würde eine Endlosschleife anzeigen. Wenn Sie auf den Computer des Clients zugreifen können, können Sie möglicherweise einen Debugger mit der eingefrorenen Anwendung verbinden oder mit jstack einen Dump von Stacktraces erstellen.
Netter Tipp danke besonders der "jstack" Ich brauche so etwas:) – SlimenTN
Eine Möglichkeit könnte große Aufgaben innerhalb des Swing-Thread ausgeführt werden, anstelle eines anderen Threads, zum Beispiel eine große Aufgabe innerhalb einer Action Ausführung:
foo.addActionListener((ActionEvent ae) -> {
// time consuming task
});
Diese alle Benutzeroberfläche Teile, bis die Funktion zum Einfrieren verursachen würde kehrt zurück. Stellen Sie sicher, dass Funktionen wie diese tatsächliche Arbeit an einen neuen Thread übergeben oder Flags setzen, um in vorhandenen Threads zu arbeiten.
Zum Beispiel hat eine statische boolean in Main, die in der Hauptschleife geprüft:
foo.addActionListener((ActionEvent ae) -> {
Main.do_action = true;
});
hmm kannst du mir bitte ein beispiel über h geben Wie kann ich Flaggen setzen? – SlimenTN
Und ja, du hast recht, ich habe einige große Aufgaben in einigen actionListeners. – SlimenTN
Ich habe es mit einem Beispiel aktualisiert. Ein Flag wäre nur ein statischer Boolescher Wert, den Sie in der Hauptschleife überprüfen. Hoffe, das hilft :) – Drgabble
- 1. Verbesserte Datenzugriffsklasse
- 2. Adobe Air - Verbesserte Startzeit
- 3. chef Verbesserte powershell_script-Leistung
- 4. Verbesserte Gewindesicherung Beratung erforderlich
- 5. Verbesserte Argo-Parsing-Leistung
- 6. Verbesserte kontextbasierte Suche
- 7. Verbesserte Registerkarte in Emacs
- 8. Android OpenCV Verbesserte Erkennungsqualität
- 9. Sublime Text: Verbesserte LaTeX Rechtschreibprüfung
- 10. Verbesserte ffmpeg Video Capture Performance?
- 11. Verbesserte Code-Lesbarkeit für SQL-Befehle
- 12. über das Apfel Verbesserte Benachrichtigung Format
- 13. Mehrere Git-Repositories aktualisieren - Verbesserte Ausgabe
- 14. Verbesserte Abfragezeit in schnell wachsenden DB?
- 15. Verbesserte Fehlerausgabe durch Grako-generierten Parser
- 16. Verbesserte nginx, jetzt munin stats funktionieren nicht
- 17. Verbesserte Spiellast auf Unity mit Big Data
- 18. C# 6's Verbesserte Überladungsauflösung - Klärung?
- 19. Verbesserte Namensstrategie Hibernate 4 funktioniert nicht
- 20. Verbesserte Leistung der standortbasierten Suche mit Lucene
- 21. Excel Tabellenkalkulation Bibliothek in Swing (= verbesserte JTable)
- 22. Lucene: Verbesserte Leistung bei nicht abgesteckten Suchen?
- 23. Verbesserte Firebase - Jetzt wird schneller Kompilierfehler
- 24. Verbesserte Objektinspektor Expert-Plug-in für delphi IDE
- 25. Miranda To Haskell - Was ist die verbesserte Version?
- 26. Problemlösung, Optionsfelder fügen Werte in Textbox hinzu. Verbesserte Lösung
- 27. Wie erreiche ich eine verbesserte Pymongo-Performance mit Threading?
- 28. Eclipse: Verbesserte Debugging und Anzeige von Variablenwerten auf mouseOver
- 29. AdMob: Verbesserte Version der AdMob-Anzeigenblock-ID Fehlerbehebung
- 30. Verbesserte Support-Bibliotheken auf 23.2.0 und ResourceNotFoundException mit PreferenceFragmen's CheckBoxPreference
Vielleicht helfen Ihnen: [Lektion:
wie soUnd eine Aktion Hörer Concurrency in Swing] (https://docs.oracle.com/javase/tutorial/uiswing/concurrency/) – pzaenger
Vielen Dank, ich werde es mir ansehen :) – SlimenTN