Runtime.getRuntime().exec Frage

DoubleM

Neues Mitglied
Hallo, ich habe eine kleine grafische Benutzeroberfläche zur Erzeugung von CAD Datein entwickelt. Diese liest die Bauteilparameter üer Textfelder ein und speichert diese anschließend in Textdateien. Mit dem Befehl
Code:
Process createfile = Runtime.getRuntime().exec("bin\\stl_CreatorV1\\OpenSCAD\\openscad.com -o "+path+"  bin\\stl_CreatorV1\\Scad-Files\\AR_Typ2.scad");
rufe ich die Datei openscad.com zur Erstellung der CAD Datei auf. Ich habe in meinem Programm eine JTextArea als Logfeld. Ich möchte nachdem ich den Speicherort für die CAD Datei ausgewählt habe und auf den Button zum Erstellen der Datei geklickt habe, die Meldung "CAD Datei wird erstellt, bitte warten!" im Logfeld ausgeben. Leider wird diese Meldung zu spät ausgegeben, erst nachdem die CAD Datei erstellt wurde. Obwohl ich diese Meldung vor dem Erstellen der CAD Datei eingefügt habe, wird diese immer danach ausgegeben. Kann mir jemand dabei helfen das Problem zu lösen? Anbei ein Ausschnitt meines Codes:
Vielen Dank,
Gruß
Markus


Java:
try {
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("D:\\STL-Dateien\\"));
chooser.setFileFilter(new FileNameExtensionFilter("*.stl Dateien", "stl"));
chooser.setSelectedFile(new File("Bauteilname"));
int retval=  chooser.showSaveDialog(chooser);

if(retval == JFileChooser.APPROVE_OPTION)
{
 logfield.append("STL Datei wird erstellt,\ndieser Vorgang kann bis zu 2 Minuten dauern, bitte warten...\n");
 
 String path = "\""+chooser.getSelectedFile().getAbsolutePath()+".stl"+"\"";
 
Process createfile = Runtime.getRuntime().exec("bin\\stl_CreatorV1\\OpenSCAD\\openscad.com -o "+path+"  bin\\stl_CreatorV1\\Scad-Files\\AR_Typ2.scad");   
 
try {

    createfile.waitFor();


if (createfile.exitValue() == 0) //Erfolgreiche Ausführung
 {
    logfield.append("CAD Datei erfolgreich erzeugt\n");
    
 }
 else //Misslungene Ausführung
 {
    logfield.append("Fehler bei Erstellung der CAD Datei\n");
 }
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}


}
else
{
 logfield.append("Abbruch...\n");
}
 

KonradN

Super-Moderator
Mitarbeiter
Erst einmal zum Verständnis des Problems:
So eine GUI Applikation ist Event gesteuert. Wenn Du bei einem Controll eine Eigenschaft änderst, die das Aussehen betrifft, dann wird zum einen der interne Wert angepasst. Das ändert aber noch nichts bei der Anzeige! Daher kommt noch zum Anderen ein weiteres Event hinzu: Es wird nur ein Event erzeugt und in die Schlange der Events gestellt, das die Applikation auffordert, sich bzw. das Control neu zu malen. Das wird oft als PAINT oder WM_PAINT bezeichnet (wenn man z.B. in die Windows UI Entwicklung einsteigt in C oder C++, dann findet man diese Konstante WM_PAINT).

Daher ist das Problem, dass Dein Code eben den ertsen Schritt macht, aber da Du ja in dem EDT - dem Event Dispatch Thread - arbeitest, kann das Event zum neu Malen nicht verarbeitet werden. Erst wenn du fertig bist mit dem aktuellen Event geht die Ausführung wieder zurück und es wird nach den nächsten Events geschaut um dann das neu malen als Event zu verarbeiten: Die Anzeige kommt also erst später.

Als Lösung dazu könnte man das z.B. in einen eigenen Thread packen. Das Ausführen und die Auswertung der Rückgabe würde somit unabhängig laufen. Die Eventsteuerung geht somit sofort zurück und die Applikation kann sich selbst wieder malen. Das ist bei allen Dingen wichtig, die etwas Zeit brauchen können, denn in der Zeit, wo das derzeit läuft, reagiert die Applikation ja auf keinerlei Events!

Wenn Du in einen eigenen Thread wechselst: Controls sind nicht Thread sicher! Eine Änderung an Controls soll aber nur aus dem EDT heraus erfolgen! In Swing gibt es den SwingUtilities mit invokeLater - damit kann man dann auch so Dinge ändern.

Also vermutlich bei dir etwas wie:
SwingUtilities.invokeLater( () -> logfield.append(...) );

(Als Parameter wird ein Runable benötigt und das wird hier in Form einer Lambda Expression erzeugt.)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Best Practice Doppelte und einfach Anführungsstriche in Runtime.getruntime().exec() Java Basics - Anfänger-Themen 6
O Methoden Runtime.getRuntime().exec(befehl); Java Basics - Anfänger-Themen 6
P Vererbung Runtime.getRuntime().exec("blub"); Java Basics - Anfänger-Themen 11
J Window 7 Problem mit Runtime.getRuntime().exec("explorer") Java Basics - Anfänger-Themen 4
D Runtime.getRuntime().exec(command); Java Basics - Anfänger-Themen 5
X Runtime.getRuntime().exec() Problem(inkonsistenter sch****) Java Basics - Anfänger-Themen 2
G Runtime.getRuntime().exec(command) für Mac OS! Java Basics - Anfänger-Themen 7
G Runtime.getRuntime().exec und Exception? Java Basics - Anfänger-Themen 3
Z kleine frage zu: Runtime.getRuntime().exec("cmd /c) Java Basics - Anfänger-Themen 3
O Aktuelles Verzeichnis Runtime.getRuntime().exec Java Basics - Anfänger-Themen 6
T Process pro =Runtime.getRuntime.exec("wine /Datei Pfad/ Java Basics - Anfänger-Themen 8
T Runtime.getRuntime().exec mit parameterübergabe Java Basics - Anfänger-Themen 16
padde479 Runtime.getRuntime.exec() Leerzeichen unterdrücken Java Basics - Anfänger-Themen 2
B mit Runtime.getRuntime().exec auch HTML-Dateien öffnen? Java Basics - Anfänger-Themen 7
G Parameterübergabe bei Runtime.getRuntime().exec Java Basics - Anfänger-Themen 16
F Probleme mit Runtime.getRunTime().exec() Java Basics - Anfänger-Themen 7
M Runtime.getRuntime().exec() Problem Java Basics - Anfänger-Themen 3
C Kann java.exe nicht aus Runtime.getRuntime().exec() starten Java Basics - Anfänger-Themen 4
J Programm was üer Runtime.getRuntime gestartet wird erkennt String Parameter nicht Java Basics - Anfänger-Themen 0
I Runtime.getRuntime mit delay? Java Basics - Anfänger-Themen 2
J Programm beenden ohne System.exit() oder Runtime.exit() Java Basics - Anfänger-Themen 5
J Mit OpenJDK entwickeln aber Oracle SE Runtime installieren? Java Basics - Anfänger-Themen 6
I equals (Override) mit eigener Exception (keine Runtime-Exception) Java Basics - Anfänger-Themen 9
R Einfaches refresh während runtime Java Basics - Anfänger-Themen 4
L0MiN Input/Output Wie kann ich Kompilierfehler richtig ausgeben lassen (Runtime)? Java Basics - Anfänger-Themen 1
D Input/Output Runtime().exec fehler abfangen Java Basics - Anfänger-Themen 4
D RunTime Exec Java Basics - Anfänger-Themen 7
D Runtime exec output wiedergeben Java Basics - Anfänger-Themen 1
G Wie bekomme ich alle Ausgaben von runTime.exec() Java Basics - Anfänger-Themen 7
T java ohne runtime ? Java Basics - Anfänger-Themen 6
B Error vs Runtime exception Java Basics - Anfänger-Themen 4
K The Java Runtime Environment cannot be found. Java Basics - Anfänger-Themen 6
G Fehlermeldung: A fatal error has been detected by the Java Runtime Environment Java Basics - Anfänger-Themen 7
pg1337 Methoden Runtime Exception Java Basics - Anfänger-Themen 13
F Runtime - Ausführung abwarten Java Basics - Anfänger-Themen 6
N Java 6 / J2SE Runtime deinstallieren Java Basics - Anfänger-Themen 11
A JAR2EXE -> Java Runtime Environment not found Java Basics - Anfänger-Themen 4
P Probleme mit Runtime.exec und Leerzeichen Java Basics - Anfänger-Themen 15
S Mit Runtime.exec() ImageMagick aufrufen -> Problem Java Basics - Anfänger-Themen 5
D Runtime.exec cygwin1.dll Java Basics - Anfänger-Themen 4
B Externe .exe-Dateien starten +Runtime Java Basics - Anfänger-Themen 6
G Mittels Runtime prüfen ob ein Programm läuft? Java Basics - Anfänger-Themen 18
I Runtime.exec mit Adminrechten Java Basics - Anfänger-Themen 2
T Seltsame Runtime-Fehlermeldung Java Basics - Anfänger-Themen 4
M Runtime exec mit Ordner angabe Java Basics - Anfänger-Themen 7
B Unklarheit bei Applets und Runtime Java Basics - Anfänger-Themen 5
P custom EventDispatcher fehlermeldung in der runtime bei invo Java Basics - Anfänger-Themen 27
D Runtime Prozeß hängt sich auf. in der Kommandozeile gehts Java Basics - Anfänger-Themen 5
O Java Runtime Java Basics - Anfänger-Themen 2
G runtime in java Java Basics - Anfänger-Themen 31
G Runtime.exec() Problem Java Basics - Anfänger-Themen 4
Z linux-befehl Runtime exec Java Basics - Anfänger-Themen 2
M Runtime.exec() Java Basics - Anfänger-Themen 5
G Batch aufrufen klappt nicht mit Runtime Java Basics - Anfänger-Themen 5
N Runtime.exec und Key event Java Basics - Anfänger-Themen 2
T Mit Runtime unter Windows einen Ordner öffnen Java Basics - Anfänger-Themen 2
P runtime geht nicht? Java Basics - Anfänger-Themen 16
P Gibt es Probleme mit Runtime Objekten in Servlets? Java Basics - Anfänger-Themen 3
G Probelm mit Runtime exec! Erstellen einer neuen Konsole. Java Basics - Anfänger-Themen 2
P Runtime problem Java Basics - Anfänger-Themen 5
D 2 Verständnisfragen zu Threads und Runtime Java Basics - Anfänger-Themen 5
S Runtime.exec -> Thread.sleep -> Konflikt Java Basics - Anfänger-Themen 7
C Syntax Probleme mit Runtime javascript Java Basics - Anfänger-Themen 9
B getRuntime().exec() Java Basics - Anfänger-Themen 4
M Grep über .getRuntime Java Basics - Anfänger-Themen 12
S .exe mit getRuntime.exec sichtbar ausführen Java Basics - Anfänger-Themen 3
L Bitte um Hilfe: getRuntime().exec() Java Basics - Anfänger-Themen 12
S mit getRuntime.exec gestarteten Prozess überwachen Java Basics - Anfänger-Themen 2
G getRuntime().exec unix problem Java Basics - Anfänger-Themen 17
N Und noch eine Frage über getRuntime() Java Basics - Anfänger-Themen 4
Z Frage nach getRunTime() Java Basics - Anfänger-Themen 2
Dimax Java Programm mit exec starten Java Basics - Anfänger-Themen 5
M Noch immer Probleme mit exec Java Basics - Anfänger-Themen 15
K exec.StdIn.Write Java Basics - Anfänger-Themen 7
C javac, exec, -sourcepath, Umgebungsvariablen Java Basics - Anfänger-Themen 9
C exec Aufruf mit Leerzeilen im Pfad Java Basics - Anfänger-Themen 3
C exec Umgebungsvariablen Java Basics - Anfänger-Themen 2
K Eingabe für exec überprüfen Java Basics - Anfänger-Themen 2
R exec: plattformunabhängig Java Basics - Anfänger-Themen 7
F Leerzeichen in Pfadangabe beim Befehl exec() Java Basics - Anfänger-Themen 5
T Benötige ich einen thread bei zugriff getRunetime.exec ? Java Basics - Anfänger-Themen 4
K Datein ausführen (exec) Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben