hey Leute... mal wieeeeder steh ich vor einem Problem, das mit dem EDT zusammenhängt, und ich komme nicht weiter.
(Mal so nebenbei: Wenn einer von euch gute Literatur über dieses Thema kennt, also damit meine ich nicht 2 Seiten sondern eher 200, nur her damit!)
Ich schilder mal die Situation: Man drückt nen Knopf in meiner GUI und es wird ein undecorated modal Dialog eingeblendet.
Problem: Nach spätenstens 20-30 Klicks auf besagtem Button passiert es mindestens einmal, dass der Dialog nicht sichtbar wird.
Er ist aber "da", denn wenn ich dorthin klicke, wo im Dialog Buttons zu sehen sein sollten, werden deren Actions aufgerufen. Das heisst er malt den Dialog einfach nicht.
Programm-Logik:
1. actionPerformed() des Auslöser-Buttons
2. Aufruf einer Methode in einem neuen Thread, dann wird die actionPerformed gleich verlassen. Diese Methode sieht so aus:
Jo, Dialog wird ab und an eben nicht angezeigt. Er ist da, aber nicht sichtbar.
Meiner Meinung nach sollte der EDT doch frei sein, weil das ganze hier läuft doch in einem eigenen Thread. Übrigens hatte ich das lock() und unlock() meines MainFrames erst auch nicht auf dem EDT, habs dann reingetan weil ich dachte vllt liegt es daran. -> nicht!
... wie immer unschätzbar dankbar für eure Tipps :toll:
(Mal so nebenbei: Wenn einer von euch gute Literatur über dieses Thema kennt, also damit meine ich nicht 2 Seiten sondern eher 200, nur her damit!)
Ich schilder mal die Situation: Man drückt nen Knopf in meiner GUI und es wird ein undecorated modal Dialog eingeblendet.
Problem: Nach spätenstens 20-30 Klicks auf besagtem Button passiert es mindestens einmal, dass der Dialog nicht sichtbar wird.
Er ist aber "da", denn wenn ich dorthin klicke, wo im Dialog Buttons zu sehen sein sollten, werden deren Actions aufgerufen. Das heisst er malt den Dialog einfach nicht.
Programm-Logik:
1. actionPerformed() des Auslöser-Buttons
2. Aufruf einer Methode in einem neuen Thread, dann wird die actionPerformed gleich verlassen. Diese Methode sieht so aus:
Java:
// lock GUI
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
MainFrame.getInstance().lock(); // macht nur setEnabled(false) auf ein paar Komponenten
}
});
// some logical stuff (sehr wenig!)
final DeletionConfirm dc = new DeletionConfirm(); // das is mein Dialog
dc.setVisible(true); // Problem besteht auch wenn ich das hier auf den EDT leg mit invokeLater
// diese zelle liegt übrigens GENAU an der stelle wo auch der dialog angezeigt wird.
//Nach kurzem nachdenken, ob hier das Problem liegen könnte (Dialog darüber verliert Fokus?!) dachte ich:
//Kann ja nicht sein, weil man hier erst ankommt wenn der Dialog geschlossen wurde, nicht wahr?
MovieTable.getInstance().getColumnModel().getColumn(0).getCellEditor()
.cancelCellEditing();
// unlock GUI
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
MainFrame.getInstance().unlock();
}
});
Jo, Dialog wird ab und an eben nicht angezeigt. Er ist da, aber nicht sichtbar.
Meiner Meinung nach sollte der EDT doch frei sein, weil das ganze hier läuft doch in einem eigenen Thread. Übrigens hatte ich das lock() und unlock() meines MainFrames erst auch nicht auf dem EDT, habs dann reingetan weil ich dachte vllt liegt es daran. -> nicht!
... wie immer unschätzbar dankbar für eure Tipps :toll:
Zuletzt bearbeitet: