Also, ich habe eine swing GUI, die dies und jenes macht, mein Problem betrifft aber folgendes:
da ist ein Label für eine Statusnachricht
und ein Button (Start) der ein Script ausführt, dieses wird mit einem ProcessBuilder.waitFor() ausgeführt, so dass die GUI schön wartet bis das Script fertig ist, bevor der Benutzer wieder rumklicken kann.
Soweit so gut funktioniert alles wie es soll, bis auf die Sache mit der Statusmeldung.
Ursprungszustand: label ist leer
Nach erstem Ausführen vom Script: label.setText(“ausgeführt”)
wenn ich jetzt aber wieder auf Start klicke, soll der Statustext wieder leer sein, was nicht passiert.
Folgender code: Button “Start” actionPerformed
statuslabel.setText("");
jPanelPatient.revalidate();
tabellenzeile = jtFormate.getSelectedRow();
anzahlscans++;
aufloesung = jtFormate.getValueAt(tabellenzeile, 1).toString();
x = aufloesung.substring(0, 3);
y = aufloesung.substring(4, 7);
dateiname = txtDateiname.getText();
f = new File(speicherort);
startScript();
statuslabel.setText("script ausgeführt");
und startScan
private void startScan(String jardir, String device, String patnu, String praxis, String x, String y,
String speicherort, String dateiname, String bildbetrachter, String mode) {
String script = jardir + "/start_sane.sh";
String[] shellcom = {script, device, patnu, praxis, x, y, speicherort, dateiname, mode};
System.out.println("start Scan: " + script + " " + device + " " + patnu + " " + praxis + " "
+ x + " " + y + " " + speicherort + " " + dateiname + " " + bildbetrachter + " " + mode);
try {
new ProcessBuilder(shellcom).start().waitFor();
System.out.println("scannen fertig");
} catch (IOException | InterruptedException ex) {
javax.swing.JOptionPane.showMessageDialog(null, ex, "Exception", 0);
Logger.getLogger(Fct_SCAN.class.getName()).log(Level.SEVERE, null, ex);
}
}
Wenn ich das .waitFor() aus Zeile 7 der startScan() Methode rausnehme, aktualisiert die GUI wie erwünscht, auch ohne das revalidate().
Die Frage ist, was muss ich tun, damit die GUI aktualisiert wird, bevor startScan ausgeführt wird.