ds10 hat geschrieben:Wenn der Fehler so einfach zu finden wäre, dann hätte ich den sicher längst, aber bei mir tritt das Problem nicht auf. Es kann aber gut sein, dass sich Einfach- und Doppelklick in die Quere kommen, ich beim Doppelklicken aber einfach nicht den Moment erwische indem das passieren würde.
Ich habs mir mal angeschaut. Die gute Nachricht ist dass es keinen doppelten Aufruf gibt oder so, und meine Annahme war auch falsch. Ursache für den Waltons-Effekt ist dass der Dialog früher angezeigt wird als der Inhalt zugewiesen wird.
ProgramInfoDialog ist ein singleton (
oh-oh )
1) ProgramInfoDialog.getInstance ruft setProgram() auf
setProgram ruft setProgramText() auf, aber nicht sofort sondern als SwingUtilities.invokeLater()
setProgramText() ruft mInfoEP.setText() auf, wodurch der Text im Dialog gesetzt wird.
2) show() ruft mDialog.setVisible(true);
Das Problem ist somit dass mDialog.setVisible(true) zumindest theoretisch NACH dem Aufruf von mInfoEP.setText() dran ist. Und auch praktisch:
Code: Alles auswählen
vor ProgramInfoDialog.getInstance().show(): 20.07.2013 19:44:14.444
vor Aufruf mDialog.setVisible(true): 20.07.2013 19:44:15.321
vor Aufruf setProgramText() 20.07.2013 19:44:15.446
nach Aufruf setProgramText() 20.07.2013 19:44:15.557
nach Aufruf mDialog.setVisible(true): 20.07.2013 19:44:20.437
nach ProgramInfoDialog.getInstance().show(): 20.07.2013 19:44:20.437
Ich nehme an, dass setVisible() zunächst einfach mal das darstellt, war von vorher noch da war (und beim ersten Mal sind das nun mal Die Waltons). Danach erst wird der (HTML) Text aufgebaut.
Abhilfe wäre entweder vor setVisible irgendwie auf das Ende von setProgramText() zu warten, oder in setProgram vor dem invokeLater() Aufruf ein mInfoEP.setText("") absetzen. Ich geh davon aus dass es gibt sicher einen Grund für das SwingUtilities.invokeLater() gibt, vielleicht die timer events und deren Folgen?
[quote="ds10"]Wenn der Fehler so einfach zu finden wäre, dann hätte ich den sicher längst, aber bei mir tritt das Problem nicht auf. Es kann aber gut sein, dass sich Einfach- und Doppelklick in die Quere kommen, ich beim Doppelklicken aber einfach nicht den Moment erwische indem das passieren würde.[/quote]
Ich habs mir mal angeschaut. Die gute Nachricht ist dass es keinen doppelten Aufruf gibt oder so, und meine Annahme war auch falsch. Ursache für den Waltons-Effekt ist dass der Dialog früher angezeigt wird als der Inhalt zugewiesen wird.
ProgramInfoDialog ist ein singleton ([url=https://www.google.de/search?q=singletons+are+evil]oh-oh :-)[/url])
1) ProgramInfoDialog.getInstance ruft setProgram() auf
setProgram ruft setProgramText() auf, aber nicht sofort sondern als SwingUtilities.invokeLater()
setProgramText() ruft mInfoEP.setText() auf, wodurch der Text im Dialog gesetzt wird.
2) show() ruft mDialog.setVisible(true);
Das Problem ist somit dass mDialog.setVisible(true) zumindest theoretisch NACH dem Aufruf von mInfoEP.setText() dran ist. Und auch praktisch:
[code]vor ProgramInfoDialog.getInstance().show(): 20.07.2013 19:44:14.444
vor Aufruf mDialog.setVisible(true): 20.07.2013 19:44:15.321
vor Aufruf setProgramText() 20.07.2013 19:44:15.446
nach Aufruf setProgramText() 20.07.2013 19:44:15.557
nach Aufruf mDialog.setVisible(true): 20.07.2013 19:44:20.437
nach ProgramInfoDialog.getInstance().show(): 20.07.2013 19:44:20.437[/code]
Ich nehme an, dass setVisible() zunächst einfach mal das darstellt, war von vorher noch da war (und beim ersten Mal sind das nun mal Die Waltons). Danach erst wird der (HTML) Text aufgebaut.
Abhilfe wäre entweder vor setVisible irgendwie auf das Ende von setProgramText() zu warten, oder in setProgram vor dem invokeLater() Aufruf ein mInfoEP.setText("") absetzen. Ich geh davon aus dass es gibt sicher einen Grund für das SwingUtilities.invokeLater() gibt, vielleicht die timer events und deren Folgen?