Moin
nein, du wirst kein JFrame finden, nur eine ContentPane. Von
der aus dann das JFrame bestimmen.
Klaro, ich hangle mich mittels (Component).getParent() solange
nach oben, bis ich das Frame gefunden habe. (Schleife)
Verdammt, hast Recht. JFrames sind ja auch Container. (Man muss Components ja immer über getContentPane().add(…) einfügen, und da war ich mir nicht sicher ob man bis zum JFrame kommt)
Wie schließe ich denn den Dialog?
JDialog.close();
THX, ist mir irgendwo in den Javadocs nicht aufgefallen.
Sorry, ich meinte hide()… Es gibt Tage da sollte man einfach nicht aufstehen.
Also ich dachte, ich habe in meiner GUI einen Button, der einen
Dialog öffnet.
Dieser Dialog
stellt sich als „bitte warten“-Dialog vor
Startet dann die externe SW mittels Runtime.exec() und bleibt
solange „stehen“ mittels wait()
Das ist eine klare Vorgabe.
Wenn der externe Prozeß fertig ist, wird der Dialog „umgebaut“
(neues Panel, welches eine TextArea hat für ne Ausgabe der
Fehlermeldungen, die in einer anderen Textdatei stehen und
OK-Button zum Schließen)
Das würd ich durch eine 2. Dialog lösen (erster weg, zweiten anzeigen) Aber das Detail überlass ich dir…
Ja klar, und wie kann ich verhindern, daß der Dialog geschlossen
werden kann?
(ich will aich das kleine Windows-X irgendwie abfangen)
setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
Dann sollte gar nichts mehr passieren (bei Exoten wie z.B. twn und fvwm unter Linux für ich mir nicht so sicher, ber unter windows wirkt das Wunder…)
Schickst Du sie mir gleich an meine Mail-Addy?
Ich post sie hier, sind eh nur Bruchstücke und nicht getestet:
public class MAIN{
JDialog waiting;
/\*\* Die Event-Methode \*/
public void actionPerformed (ActionEvent A){
Frame F = getMyParent ();
waiting = new JDialog(F,true);
waiting.setDefaultCloseOperation(JDialog.DO\_NOTHING\_ON\_CLOSE);
... init JDialog ....
//Hier kommt eine JProgressBar mit setIndeterminate(true) immer gut ...
Thread runner = new Runner(this);
runner.start();
waiting.show(); // \* Hier bleibt er stehen bis der Dialog wieder geschlossen wurde.
}
public void finishedProcess (String errorMessages){
JDialog derNeueDialog = new DeinDialog(errorMessages);
waiting.hide(); //Wenn das aufgerufen wird geht der Thread bei \* erst weiter.
derNeueDialog.show();
}
}
public class Runner extends Thread {
MAIN m;
public Runner (MAIN M){
m = M;
}
public void run (){
try {
Process P = Runtime.getRuntime.exec (WasAuchImmer);
new Reader (P.getOutputStream()).start(); //Wenn du die 2 Threads auslässt bleibt der Process irgendwann wegen vollen Buffer stehen.
new Reader (P.getErrorStream()).start();
P.waitFor();
m.finishedProcess ("no errors");
} catch (Exception E){
m.finishedProcess (E.toString());
}
}
}
Und wenn du das ganze vorzeitig abbrechen willst: P.destroy(); m.finishedProcess („Abbruch“); dann aber nicht vergessen.
cu