Liebe Javafreunde,
ich lasse auf einen Klick auf einen Button hin ein externes Skript (Python-Programm) ausführen und möchte den Füllstand einer jProgressBar entsprechend des Konsolenoutputs des externen Skripts während dessen Ausführung aktualisieren.
Dabei ist mir außerdem wichtig, das Programm meiner Java-Gui trotzdem auf die Terminierung des externen Skripts wartet, bevor beispielsweise ein neues Python-Programm aufgerufen wird.
Dazu sieht mein Code bisher so aus:
Die Probleme sind bisher:
1. Obwohl, wie im Code ersichtlich, die jProgressBar anfangs VOR der Ausführung des externen Skripts schon auf "60" gesetzt werden müsste, tut sie das nicht! Der gesamte Code vor dem Runtime/exec-Aufruf wird einfach übergangen, auch das Update des jLabels mit "Please wait"...
2. Die jProgressBar füllt sich nicht, obwohl das Python-Programm Zahlen in die Konsole printet
3. Meine GUI reagiert während der Ausführung des Python-Programms nicht auf irgendwelche Mausklicks
Was kann ich tun, um diese Probleme zu beheben?
Mit freundlichen Grüßen
Ralf Hauenschild
ich lasse auf einen Klick auf einen Button hin ein externes Skript (Python-Programm) ausführen und möchte den Füllstand einer jProgressBar entsprechend des Konsolenoutputs des externen Skripts während dessen Ausführung aktualisieren.
Dabei ist mir außerdem wichtig, das Programm meiner Java-Gui trotzdem auf die Terminierung des externen Skripts wartet, bevor beispielsweise ein neues Python-Programm aufgerufen wird.
Dazu sieht mein Code bisher so aus:
Java:
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
String a = jTextField1.getText();
jProgressBar1.setValue(60);
jLabel7.setText("Please wait...");
Runtime rt = Runtime.getRuntime();
Process proc1;
try {
proc1 = rt.exec("python ContigsBaseDistribution.py " + a);
try {
String line;
BufferedReader input = new BufferedReader(new InputStreamReader(proc1.getInputStream()));
while ((line = input.readLine()) != null) {
jProgressBar1.setValue(Integer.parseInt(line));
}
input.close();
}
catch (Exception err) {
err.printStackTrace();
}
StreamGobbler errorGobbler1 = new
StreamGobbler(proc1.getErrorStream(), "ERROR");
// any output?
StreamGobbler outputGobbler1 = new
StreamGobbler(proc1.getInputStream(), "OUTPUT");
// kick them off
errorGobbler1.start();
outputGobbler1.start();
try {
proc1.waitFor();
} catch (InterruptedException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (IOException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
Die Probleme sind bisher:
1. Obwohl, wie im Code ersichtlich, die jProgressBar anfangs VOR der Ausführung des externen Skripts schon auf "60" gesetzt werden müsste, tut sie das nicht! Der gesamte Code vor dem Runtime/exec-Aufruf wird einfach übergangen, auch das Update des jLabels mit "Please wait"...
2. Die jProgressBar füllt sich nicht, obwohl das Python-Programm Zahlen in die Konsole printet
3. Meine GUI reagiert während der Ausführung des Python-Programms nicht auf irgendwelche Mausklicks
Was kann ich tun, um diese Probleme zu beheben?
Mit freundlichen Grüßen
Ralf Hauenschild
Zuletzt bearbeitet: