Swing Anzeige des Warten-Cursors

kodela

Bekanntes Mitglied
Hallo,

ich habe ein Problem mit dem Warten-Cursor, genauer gesagt, mit der Umschaltung vom Normal-Cursor auf den Warten-Cursor, die über den Aufruf
Java:
strApp.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
realisiert wird und immer funktioniert, wenn sich der Normal-Cursor zum Zeitpunkt der Umschaltung im Bereich des Hauptfensters befindet. Es kann allerdings passieren, dass dies bei bestimmten Aktionen, zum Beispiel wenn über Strg+V etwas eingefügt und etwas zeitaufwendig geprüft werden soll, der Normal-Cursor sich außerhalb des Anwendungsfensters befand. In solchen Fällen wird der Warten-Cursor nicht angezeigt, auch wenn der Mauszeiger während der Wartezeit in das Fenster gezogen wird.
Wie kann man dieses Verhalten ändern, dass der Warten-Cursor (während einer Wartezeit) immer angezeigt wird, wenn sich der Mauszeiger im Anwendungsfenster befindet. Mit dem zusätzlichen vorangestellten Aufruf von
Code:
strApp.setAutoRequestFocus(true);
erreiche ich dies nicht.

Vorweg schon einmal danke für jeden Tipp.
 
Beste Antwort
Prinzipiell, das sagt mir mein Bauch, solltest Du auf nichts verzichten (bspw. "Eindeutigkeitsprüfung auf einen eigenen Thread"), weil es irgendwie nicht funktioniert.
Du schreibst, dass Java abstürzt. Crash es richtig (dann könnte man über eine Fehlermeldung an der richtigen Stelle (Stichwort Logging) den Grund herausfinden) oder "friert" die Anwendung ein. Sollte letzteres der Fall sein, dann spricht das spontan gesagt für einen Deadlock. Den Grund hierfür zu finden (generell für Deadlocks) gehört aber zu einer der schwierigsten Aufgaben in der Programmierung (Stichwort "Race condition").

Zurück zu Deiner Anwendung: Auch wenn es Dir wenig hilft -sorry-, aber die aufwändige Eindeutigkeitsprüfung würde ich wieder auslagern. Dann wirst...

mrbela

Bekanntes Mitglied
Hi kodela,

in welcher GUI Umgebung befindest Du Dich denn? Swing, JavaFX, SWT?

Auch wäre es sinnvoll zu wissen, von welchem Typ 'strApp' (ganzer Pfad) und auch Cursor.

Danke schonmal für die Auskunft.
 

LimDul

Top Contributor
Wahrscheinlichste Ursache: Die langlaufende Bearbeitung ist nicht in einen eigenen Thread ausgelagert. Dadurch wird die gesamte Gui blockiert.

Lösung: Die langlaufende Bearbeitung in einen eigenen Thread auslagern und entsprechend synchronsieren.
 

kodela

Bekanntes Mitglied
Hallo mrbela,

ja, zumindest auf einen Teil Deiner Fragen wollte ich in meinem Beitrag eingehen, aber dann habe ich es doch vergessen.
Die Hauptklasse der Anwendung ist 'StradokuApp' vom Typ JFrame, also eine Swing Umgebung. 'strApp' ist eine Referenz auf die Klasse 'StradokuApp'. Mittlerweile habe ich allerdings das Handling für den Wait-Cursor etwas geandert und dafür in 'StradokuApp' die Methode 'setWaitCursor()' eingeführt, die sieht so aus.
Java:
    public void setWaitCursor(boolean set) {
        if (set) {
            setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
        } else {
            setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
        }       
    }
An meinem Problem hat sich damit allerdings nichts geändert.

Die GUI selbst wurde mit dem GUI-Builder von NetBeans 8.2 erstellt. Der Cursor ist als 'awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)' definiert. Entwicklungsumgebung ist Windows 10.

Sollte ich nicht alles so beantwortet haben, wie Du es erwartest, dann liefere ich gerne nach.

Gruß, kodela
 

mrbela

Bekanntes Mitglied
Danke für die Infos.
Das Problem wird das sein, das LimDul schon vermutete:

Man sollte immer aufwändige, länderlaufende Operationen in einen eigenen Thread auslagern. Aus diesem "Arbeiter-Thread" heraus könntest Du, da Du in Swing bist, mit SwingUtilities.invokeLater dann den Cursor auf wartend (und am Ende der Abarbeitung wieder auf normal) setzen. Schau mal hier, da findest Du ein kleines Beispiel dazu.

Kennst Du Dich mit Threads aus, bzw. weißt Du was das ist?
 

kodela

Bekanntes Mitglied
Danke für die Antworten!

Ja, ich weiß was Threads sind und es laufen mehrere davon in meiner Anwendung, zum Beispiel für die laufende Zeitanzeige, für die Generierung oder den Ausdruck von Stradokus (Str8ts) und für den Import einer Stradoku-Liste. Damit habe ich keine Probleme.

In der aktuellen Situation, Stradokus sollen auf Eindeutigkeit geprüft werden, gibt es allerdings solche. Diese Eindeutigkeitsprüfung lief bei mir bereits unter einem eigenen Thread und das funktionierte auch - bis auf eine Ausnahme. Um die zu beschreiben, muss ich etwas ausholen:

Der Anwender soll selbst Stradokus "basteln' können (wer nicht weiß, was das sind, es sind Str8ts, die wiederum sind den Sudokus ähnlich, haben aber auch schwarze Zellen). Dafür werden in das Raster erst schwarze Zellen und mindestens ein Vorgabewert eingetragen. Das Programm versucht diese Eingabe zu lösen. In seltenen Fällen muss dafür der Vorgabewert geändert werden. Die gefundene Lösung ist bei nur einem Vorgabewert natürlich nicht eindeutig, was aber für das weitere Vorgehen keine Rolle spielt.

Im nächsten Schritt kann der Anwender nun die vom Programm gefundene Lösung bearbeiten, das bedeutet, dass er Vorgabewerte entfernen oder in den schwarzen Zellen Sperrwerte setzen kann. Nach jeder solchen Aktion (es können auch mehrere in Folge sein) kann das Stradoku geprüft werden. Eine solche Prüfung bezieht sich auf die Lösbarkeit, den Schwierigkeitsgrad und die Eindeutigkeit. Ein Stradoku ist nur dann eindeutig, wenn es genau eine Lösung gibt. Kann das Stradoku mit einem Level von 1 - 4 gelöst werden, dann ist es auch eindeutig. Kann es gelöst werden, aber nicht mit einem der Level 1 - 4, dann ist es nur gültig und hat den Level 5, wenn es eindeutig lösbar ist. Dieses Prozedere wird so lange fortgesetzt, bis man ein Stradoku mit dem gewünschten Level hat.

Um die Eindeutigkeit festzustellen, muss für jede freie Zelle geprüft werden, ob das Stradoku durch Einsetzen aller Ziffern, die nicht Lösungswert sind, gelöst werden kann. Nur wenn dies für keine einzige der freien Zellen möglich ist, ist das Stradoku gültig und hat den Level 5.

Diese Eindeutigkeitsprüfung arbeitet in einem eigenen Thread grundsätzlich einwandfrei. Es gibt nur eine einzige Ausnahme. Wenn bei dieser Eindeutigkeitsprüfung genau der erste Lösungsversuch ergibt, dass das Stradoku nicht gelöst werden kann, was sehr selten vorkommt, stürzt die Anwendung ab. Java selbst arbeitet nicht mehr und muss über den Taskmanager beendet werden.

Läuft die Eindeutigkeitsprüfung nicht über einen eigenen Thread (jedoch mit dem selben Code), dann tritt dieses Problem nicht auf. Ich habe Tage damit verbracht, die Ursache für dieses eigenartige Verhalten zu ergründen - es ist mir nicht gelungen. Allein wegen dieses Problems habe ich einen Warte-Dialog mit Fortschrittsanzeige über Bord geworfen und habe mich mit einem Hinweis in der Statuszeile sowie dem Warte-Cursor begnügt.

So viel zum Verständnis dafür, dass ich für die Eindeutigkeitsprüfung auf einen eigenen Thread verzichten muss.

Gruß, kodela
 

mrbela

Bekanntes Mitglied
Prinzipiell, das sagt mir mein Bauch, solltest Du auf nichts verzichten (bspw. "Eindeutigkeitsprüfung auf einen eigenen Thread"), weil es irgendwie nicht funktioniert.
Du schreibst, dass Java abstürzt. Crash es richtig (dann könnte man über eine Fehlermeldung an der richtigen Stelle (Stichwort Logging) den Grund herausfinden) oder "friert" die Anwendung ein. Sollte letzteres der Fall sein, dann spricht das spontan gesagt für einen Deadlock. Den Grund hierfür zu finden (generell für Deadlocks) gehört aber zu einer der schwierigsten Aufgaben in der Programmierung (Stichwort "Race condition").

Zurück zu Deiner Anwendung: Auch wenn es Dir wenig hilft -sorry-, aber die aufwändige Eindeutigkeitsprüfung würde ich wieder auslagern. Dann wirst Du auch das Problem mit dem Cursor nicht mehr haben.. Dafür dann das andere, ich weiß. Aber das ist ein Fehler, der dann zu beheben ist.

Wenn Du magst kannst Du ja auch mal den Code teilen.. Aber ob ich/wir auf die Schnelle da einen Fehler (Deadlock, oder evtl. was ganz anderes) finden, kann ich Dir natürlich nicht versprechen.
 
Beste Antwort

kodela

Bekanntes Mitglied
Hallo mrbela,

danke für die Antwort und Dein Angebot. Ich stelle eben das Projekt mit der Version, in der die Eindeutigkeitsprüfung in einem eigenen Thread erfolgte, zusammen. Bin damit noch nicht fertig und muss jetzt meine Arbeit damit einstellen. Morgen melde ich mich dann wieder.

Gruß, kodela
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
hannibalstgt Fehler bei JCOMBOBOX GUI Anzeige AWT, Swing, JavaFX & SWT 4
M suche geeignetes Fenster zur Anzeige AWT, Swing, JavaFX & SWT 49
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
S AffineTranformation Bilder verschwinden von Anzeige bei Pan, Zoom AWT, Swing, JavaFX & SWT 6
kodela Verspätete Anzeige in Textfeldern AWT, Swing, JavaFX & SWT 8
F BorderLayout Hilfe bei Anzeige AWT, Swing, JavaFX & SWT 2
L Java FX Keine Anzeige Im Tableview AWT, Swing, JavaFX & SWT 4
F JScrollPane anzeige AWT, Swing, JavaFX & SWT 7
F Design-Anzeige im Windowbuilder AWT, Swing, JavaFX & SWT 3
thet1983 JavaFX TableView Objekt Daten anzeige AWT, Swing, JavaFX & SWT 2
D JavaFX Control zur Anzeige von eBooks AWT, Swing, JavaFX & SWT 5
javampir Swing Anzeige der FileFilter im JFileChooser AWT, Swing, JavaFX & SWT 0
T Probleme mit Anzeige von Elementen im JPanel AWT, Swing, JavaFX & SWT 1
J JavaFX JavaFX Probleme bei der Anzeige von Text AWT, Swing, JavaFX & SWT 18
G JScrollPane bricht am Ende der Anzeige nicht um AWT, Swing, JavaFX & SWT 2
V JWindow: Falsche Anzeige auf Ubuntu AWT, Swing, JavaFX & SWT 2
N JDialog als Progress-Anzeige AWT, Swing, JavaFX & SWT 6
M AWT Gui anzeige Probes - Elemente erscheinen nicht regelmäßig AWT, Swing, JavaFX & SWT 2
A JFreeChart BarChart invertierte anzeige oder werte bereich von-bis AWT, Swing, JavaFX & SWT 4
Ollek JList - neuer Eintrag in ArrayList dadurch keine Anzeige der Objekte AWT, Swing, JavaFX & SWT 18
P Swing Problem mit der Anzeige AWT, Swing, JavaFX & SWT 12
B SWT TreeViewer dynamische Anzeige von Icons AWT, Swing, JavaFX & SWT 3
M Anzeige updatet sich erst am Ende des Programms AWT, Swing, JavaFX & SWT 3
J JList, Anzeige aktualisieren AWT, Swing, JavaFX & SWT 7
J Kleines Anzeige Problem(nur blanker Frame) AWT, Swing, JavaFX & SWT 22
A Swing JFileChooser - Anzeige in Echtzeit filtern AWT, Swing, JavaFX & SWT 10
N Swing JTextPane zur Anzeige von HTML AWT, Swing, JavaFX & SWT 2
A Swing Anzeige Text in JScrollpane AWT, Swing, JavaFX & SWT 8
M TabbpedPane Anzeige aktualisieren AWT, Swing, JavaFX & SWT 6
S Anzeige von Beschleunigungswerten AWT, Swing, JavaFX & SWT 2
S Anzeige eines JWindows AWT, Swing, JavaFX & SWT 3
N jcomboBox anderer Wert als Anzeige AWT, Swing, JavaFX & SWT 6
B Swing Java crashed nach Anzeige JOptionePane AWT, Swing, JavaFX & SWT 20
S Probleme mit Anzeige von JComboBox AWT, Swing, JavaFX & SWT 2
J Anzeige AWT, Swing, JavaFX & SWT 5
F Verzögerung bei der ersten Anzeige AWT, Swing, JavaFX & SWT 6
timbeau Gitter in Sudoko-Anzeige AWT, Swing, JavaFX & SWT 9
J Swing JTable, eigener TableCellRenderer Keine Anzeige in den Zellen AWT, Swing, JavaFX & SWT 8
D Swing Anzeige während eines Ladevorganges AWT, Swing, JavaFX & SWT 6
N Eigener Grafik Editor mit fehlerhafter Anzeige AWT, Swing, JavaFX & SWT 4
C SWT SWT Browser anzeige bug AWT, Swing, JavaFX & SWT 3
A Einschreiten vor anzeige eines Frames AWT, Swing, JavaFX & SWT 26
P JTree - Explorer mit nur eingeschränkter Anzeige AWT, Swing, JavaFX & SWT 17
J Verzögerung bei Änderungen der Anzeige abwarten AWT, Swing, JavaFX & SWT 5
T SWT Keine Anzeige der Widgets nach Comboauswahl AWT, Swing, JavaFX & SWT 2
M.F.G. Fehler bei der Anzeige Grafischer Elemente AWT, Swing, JavaFX & SWT 13
B SWT Textdatei Lesen und Anzeige in View - Zeichensatzproblem AWT, Swing, JavaFX & SWT 4
hdi JTree: interne Daten OK, Anzeige schwarze Magie AWT, Swing, JavaFX & SWT 2
R Anzeige der Aktivität AWT, Swing, JavaFX & SWT 3
S Splash Screen / "Loading" Anzeige im Programm AWT, Swing, JavaFX & SWT 27
S JTree - Anzeige des Knotennamen ändern AWT, Swing, JavaFX & SWT 2
B JList Anzeige aktualisieren (Models) AWT, Swing, JavaFX & SWT 2
G Keine Anzeige des Balkens AWT, Swing, JavaFX & SWT 3
C JTable aktualisiert die Anzeige nicht AWT, Swing, JavaFX & SWT 2
G Anzeige schwierigkeiten AWT, Swing, JavaFX & SWT 3
G Problem mit Anzeige von HTML AWT, Swing, JavaFX & SWT 5
P JRE 6 -> ToolTip & mnemonic Anzeige AWT, Swing, JavaFX & SWT 4
G JComboBox - Anzeige mit Wert verknüpfen AWT, Swing, JavaFX & SWT 3
G Anzeige Problem AWT, Swing, JavaFX & SWT 4
D Anzeige eines Bildes: JPanel oder JLabel ? AWT, Swing, JavaFX & SWT 3
T dynamische anzeige? AWT, Swing, JavaFX & SWT 4
W JList Anzeige erneuern AWT, Swing, JavaFX & SWT 4
P JMenuBar und JToolBar Anzeige Probleme AWT, Swing, JavaFX & SWT 5
T JComboBox anzeige AWT, Swing, JavaFX & SWT 6
F Anzeige von JPanel AWT, Swing, JavaFX & SWT 3
M JTree und Anzeige des entsprechenden Panels AWT, Swing, JavaFX & SWT 5
K Probleme mit der Anzeige eines einzigen Nodes in einem JTree AWT, Swing, JavaFX & SWT 9
S SWT-Widgets für Anzeige-Elemente AWT, Swing, JavaFX & SWT 3
G Keine Anzeige von Grafik bei externem paintComponent-Aufruf AWT, Swing, JavaFX & SWT 2
M GUI mit Swing erst nach Maximieren richtige Anzeige AWT, Swing, JavaFX & SWT 2
S Anzeige der Benutzeroberfläche verzögern AWT, Swing, JavaFX & SWT 10
G Anzeige von JTextField erneuern AWT, Swing, JavaFX & SWT 12
P DefaultTreeCellEditor -> Anzeige Probleme AWT, Swing, JavaFX & SWT 3
swek Flackernde Anzeige AWT, Swing, JavaFX & SWT 4
C Schweres Problem mit JDialog und Threads! Anzeige blockiert! AWT, Swing, JavaFX & SWT 5
A JTree-Anzeige filtern AWT, Swing, JavaFX & SWT 7
R Anfängerfrage:anzeige von Gui elementen AWT, Swing, JavaFX & SWT 2
W Anzeige von anderen Bildformaten: BMP, TIFF, PCX AWT, Swing, JavaFX & SWT 5
S Anzeige einer Progressbar. AWT, Swing, JavaFX & SWT 3
G Komponente zur Anzeige einer Textdatei. AWT, Swing, JavaFX & SWT 10
G JList: Anzeige von null-Werten verhindern AWT, Swing, JavaFX & SWT 3
I Problem mit korrekter Anzeige AWT, Swing, JavaFX & SWT 2
G Gibts ne Klasse zur Anzeige von Ziffern? AWT, Swing, JavaFX & SWT 4
S Anzeige-Wirrwar in JScrollbar AWT, Swing, JavaFX & SWT 3
B Anzeige eines SpinnerNumberModel AWT, Swing, JavaFX & SWT 3
izoards JavaFX Background Task warten auf Knopfdruck AWT, Swing, JavaFX & SWT 4
G FX warten bis ein anderes GUI Element ausgewählt wurde AWT, Swing, JavaFX & SWT 8
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
H Eigener Dialog mit Rückgabe -> Warten auf Button AWT, Swing, JavaFX & SWT 3
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
J Compiler in der JavaFX stop() Methode warten lassen bist eine Aktion in einer anderen Scene gemacht AWT, Swing, JavaFX & SWT 5
W JavaFX Webview warten bis Seite geladen geladen ? AWT, Swing, JavaFX & SWT 0
U Java FX Warten auf Textfield eingabe AWT, Swing, JavaFX & SWT 17
M JavaFX FadeTransition, warten bis beendet AWT, Swing, JavaFX & SWT 10
O Swing JDialog öffnen und dann warten bis er geschlossen wurde AWT, Swing, JavaFX & SWT 2
H Event Handling JavaFx - auf Event warten AWT, Swing, JavaFX & SWT 4
Thallius Auf Swingworker warten? AWT, Swing, JavaFX & SWT 5
D Swing Bei MenuSelectionManager auf Ausführung warten? AWT, Swing, JavaFX & SWT 5
gamebreiti auf usereingabe warten mit GUI(nur Labels, Buttons etc. keine Texteingaben) AWT, Swing, JavaFX & SWT 3
P Warten auf komponente AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben