ActionListener blockiert Bedienung des ganzen Systems

Apotekarnes

Mitglied
Hallo allerseits,

ich habe einen ActionListener für eine JComboBox.
Beim Auswählen eines der Items wird ruft der Listener ein externes Skript als Prozess auf und wartet mit p.waitFor() auf dessen Ende.
Während dieser Wartezeit freezed nicht nur die GUI sondern auch die Bedienbarkeit des gesamten Systems (Ubuntu). Tastatureingaben (Ausnahme: ALT-Taste) und Bedienung per Maus sind nicht mehr möglich. Währenddessen bleibt die JComboBox offen.
Erst nach 3 Minuten - so lange dauert die Ausführung des externen Skripts - geht alles wie gewohnt.

Leider werden die Ergebnisse des externen Skripts im ActionListener für den weiteren Ablauf benötigt, sodass ich das p.waitFor() brauche.

Wieso blockiert der JAVA-Prozess in dieser Situation das ganze System?

Was kann man tun um das Problem zu umgehen?

Viele Grüße
Apotekarnes
 

turtle

Top Contributor
Wieso blockiert der JAVA-Prozess in dieser Situation das ganze System?
Das glaube ich nicht.

Wahrscheinlich/Sicher blockiert deine Applikation und je nach dem, wird auch das Gesamtsystem in Mitleidenschaft gezogen, wenn da beispielsweise blockierende I/O gemacht wird. Sollte also eher "schnarchlangsam" sein, aber noch reagieren.

Was kann man tun um das Problem zu umgehen?
Anders programmieren;)

Im Ernst, du musst den Code auf mehrere Threads verteilen und insbesondere NICHT den EDT blockieren, Siehe zum Einstieg meinen Blog zu SwingWorker.
 

dogmi

Mitglied
Versuchs Mal mit Threads.
Starte den Aufruf deines Skritpes über einen thread, sollte nix blockieren, oder deine Maschiene ist ein 486dx2 aus dem Jahre 1992. :lol:
 

Apotekarnes

Mitglied
Vielen Dank euch beiden! :)

Mit Threads/StringWorkers hat es geklappt.

Dennoch wundere ich mich, dass es ein einzelnes JAVA Programm, ob darin nun ein ActionListener läuft oder was auch immer, es schafft, die Bedienbarkeit des Systems zu blockieren. ???:L
 

Sen-Mithrarin

Gesperrter Benutzer
nun .. die frage dürfte wohl mal wieder in die richtung fallen : wie genau callst du das script und was macht es ?

wenn man den EDT blockiert sollte normalerweise nur deine gui "freezen" ... der rest des systems aber unabhängig davon normal weiterlaufen


wobei : es kommt auch drauf an welchen desktop-manager du nutzt und wie dieser mit events umgeht ... und auch welche VM du nutzt und wie die sich ins system einklinkt

wenn alles richtig schlimm kommt kann es schon durch aus sein das ein event ausgelöst wird, es jedoch nicht verarbeitet werden kann weil gerade das event was du ausgelöst hast um das ganze zu starten sich bis runter in den kernel zieht ... aber da gehe ich selbst bei älteren unix-varianten von aus das diese nicht so schlecht programmiert sind ...


und selbst wenn solltest du mit STRG+ALT+1 immer noch vom dwm aufs terminal kommen und kannst dort z.b. mit top gucken wer die leistung klaut
 

wef34fewrg

Aktives Mitglied
Ja, benutze OpenJDK und eines der neuesten Ubuntu Systeme

Aus einem mir nicht bekannten Grund scheint das OpenJDK dafür verantwortlich zu sein. Das Problem findest du im Ubuntu Forum häufiger und ich hatte es ebenfalls (auch unter nicht Ubuntu). Eine Alternative wäre es mit Oracles Software zu arbeiten, oder dir, falls das Problem in Zukunft auftritt, entsprechende Threads rauszusuchen.
Gab immer wieder mal kleine Lösungen für spezielle Situationen, aber befriedigendes hab ich leider noch nicht gefunden. :(
 

ARadauer

Top Contributor
Swing ist eine Fehlkonstruktion.
Willst du einfach so etwas an der GUI ändern sollte man das im EDT machen. In dem befindet man sich aber in den meisten Fällen an dieser Stelle nicht.
Wird ein ActionListener aufgerufen will man meist irgendwelche business logik ausführen. Das darf man aber nicht im EDT machen in dem man sich in diesem Moment aber befindet.

Ds hätte grundsätzlich anders gelöst werden können. Wichtig ist halt das man weiß was der EDT ist und das man sich bewusst ist, ob man da gerade drin ist und ob der Code den man gerade macht im EDT laufen darf...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F JButton und ActionListener Allgemeine Java-Themen 3
F System Tray Menubutton ActionListener Allgemeine Java-Themen 5
V Event Handling ActionListener nur bei "checked" CheckBoxMenuItem Allgemeine Java-Themen 2
K Best Practice Auf die Klasse zugreifen im erzeugten ActionListener Allgemeine Java-Themen 2
S Methode funktioniert nicht als ActionListener Allgemeine Java-Themen 4
C ActionListener - ToggleButton als von KI geklickt "markieren" Allgemeine Java-Themen 2
Z Swing Problem mit ActionListener Allgemeine Java-Themen 6
X getText undefiniert in ActionListener Allgemeine Java-Themen 5
D ActionListener wird mit jedem Mal öfter aufgerufen Allgemeine Java-Themen 2
P Variablen Variable von void im ActionListener verwenden Allgemeine Java-Themen 3
F Swing NetBeans nimmt ActionListener nicht an. Allgemeine Java-Themen 2
C Event Handling ActionListener manuell auslösen Allgemeine Java-Themen 8
G Button-Registrierung beim ActionListener erst NACH Tastendruck Allgemeine Java-Themen 2
P ActionListener / Label Name auslesen Allgemeine Java-Themen 2
C ActionListener zwei Buttons zuweisen Allgemeine Java-Themen 11
T ActionListener und Singleton Allgemeine Java-Themen 15
J ActionListener-Klasse will Methode nicht annehmen Allgemeine Java-Themen 6
G Übergabeparameter an ActionListener Allgemeine Java-Themen 9
Z Mit ActionListener in anderem Frame lauschen? Allgemeine Java-Themen 3
W 2 Klassen + ActionListener Allgemeine Java-Themen 2
G Anonymen Buttons in for schleife ActionListener hinzufügen Allgemeine Java-Themen 5
C JTree: ActionListener auf die Nodes Allgemeine Java-Themen 3
C ActionListener reagiert zu oft Allgemeine Java-Themen 5
MQue ActionListener und GUI trennen Allgemeine Java-Themen 3
L ActionListener / Buttons Allgemeine Java-Themen 8
E ActionListener Allgemeine Java-Themen 8
TheJavaKid Programmablauf anhalten bis actionlistener ausgeführt wurde Allgemeine Java-Themen 6
minzel ActionListener aus Package Allgemeine Java-Themen 24
F AbstractAction und ActionListener Allgemeine Java-Themen 2
J variablen wert ändernung mit einer art actionlistener? Allgemeine Java-Themen 4
K ActionListener ohne implements? Allgemeine Java-Themen 2
L ActionListener > Variable ... u.v.m. Allgemeine Java-Themen 19
W ActionListener + Klasse einbinden Allgemeine Java-Themen 2
llabusch Thread blockiert Dialog Allgemeine Java-Themen 1
R PIPE Kommunikation mit Prozess blockiert Allgemeine Java-Themen 0
V Applet trotz Ausnahme blockiert Allgemeine Java-Themen 0
I Java Applet wird immer blockiert Allgemeine Java-Themen 3
S Java Applet wird dauerhaft blockiert Allgemeine Java-Themen 1
C Prozesssteuerung - Speicherhungrige externe Programme werden blockiert Allgemeine Java-Themen 2
F SAXBuilder blockiert löschen von Dateien Allgemeine Java-Themen 2
V Swing JFileChooser blockiert nicht den EDT? Allgemeine Java-Themen 3
S von OutputStream in InputStream schreiben ohne das es blockiert..? Allgemeine Java-Themen 2
C ApplicationContext blockiert bei der Erstellung Allgemeine Java-Themen 2
R read/readline blockiert Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben