zum EDT : JA, denn alle events, sei es input oder manipulation der GUI, laufen grundsätzlich über den EDT (und müssen dies sogar auch, vor allem was änderungen an der GUI angeht)
grund : java selbst kann mit key-input-events erstmal gar nichts anfangen und würde diese bis auf den desktop “durchfallen” lassen, wenn halt nicht vom input-hook diese aufgefangen und in die VM geleitet werden würden
die native implementierung die an den hook setzt baut daraus dann ein java-objekt und übergibt dies dem EDT
ein sehr einfaches beispiel :
schreib in die actionPerformed mal ein “while(true) { }”
damit blockierst du den EDT, und wie du feststellen wirst auch sämtliche inputs sowie das update der GUI (wenn alles “korrekt” implementiert ist)
zu den möglichen tücken : auf jeden fall, denn wie oben bereits geschrieben läuft alles über den EDT
du musst also darauf achten das wenn die aktionen die in der Action ablaufen entweder nicht zu zeitintensiv werden oder diese korrekt auskoppeln
das ganze endet dann mal schnell in solchen konstrukten (vielleicht nicht ganz clean code oder gar best practice, aber es funktioniert)
{
(new Thread(new Runnable() //auskopplung der eigentlichen aktion in einen extra thread
{
public void run()
{
// ... TO-DO
SwingUtilities.invokeLater(new Runnable() //a-synchrone wieder-einkopplung in den EDT
{ //kann auch über invokeAndWait(Runnable) synchron erfolgen so das der code auf die abarbeitung des codes wartet
public void run()
{
// ... GUI-Update
}
});
}
})).start();
}```
der sinn hinter dahinter ist das der EDT selbst nur den weiteren Thread anstoßen muss, sonst aber sofort weiter arbeiten kann um halt weitere events zu verarbeiten
wenn dann die arbeit abgeschlossen ist und die GUI entsprechend geändert werden muss dann MUSS dies wieder über den EDT erfolgen, und das macht man z.b. mit SwingUtilities.invokeLater() und invokeAndWait()
der unterschied dieser methoden liegt nur darin das bei invokeLater() das Runnable an den EDT übergeben wird, aber der code weiterläuft
invokeAndWait() hingegen blockiert so lange bis der EDT das Runnable komplett abgearbeitet hat
für letzteres fällt mir jetzt erlich gesagt spontan kein beispiel ein bei dem es sinnvoll wäre auf das GUI-update zu warten, aber ich denke den anderen dürfte was einfallen