Meine Java Programm hägt durch waitFor() ! HILFE!

Status
Nicht offen für weitere Antworten.

Magic-Alex

Mitglied
Hallo allerseits!

Ich schreibe zur Zeit an einer kleinen Anwedung, welche unter anderem mir auch eine Diskette
formatieren soll. Dazu rufe ich per runtime... den Dos Format Befehl inkl. Parameter auf. Daraufhin
mache ich ein waitFor(), damit mein Programm wartet bis die Formatierung beendet ist, und erst
danach sollen Dateien auf die Diskette geschrieben werden.

Nun mein Problem:
Mein Programm hat eine kleine mit Swing geschriebene Oberfläche
bekommen. Leider tut sich da während er wartet bis die Formatierung beendet ist gar nichts. Wäre
ganz schon wenn ich wenigstens in meiner jTextArea was angezeigt bekommen würde.

Code:
private void Format_actionPerformed(ActionEvent e) throws IOException
{
	jTextArea.setText("");
	jTextArea.append("Bitte warten bis Formatierung der Diskette beendet ist");
	try {
	    Process form = Runtime.getRuntime().exec
                                  ("command.com /C start ECHO J | format A: /FS:FAT /V:Resotec /F:720 /X");
		try {
			form.waitFor();
		} catch (InterruptedException e2) {e2.printStackTrace();}
	} catch (IOException e1) {e1.printStackTrace();}

	jTextArea.append("Dateisystem wird auf Diskette erstellt");
		
	for (int i=0; i<=9; i++){	
		File fSrc = new File("D:\\Files\\DA0"+i);
		File fDes = new File("a:\\DA0"+i);
		FileInputStream fis = new FileInputStream (fSrc);
		FileOutputStream fos = new FileOutputStream (fDes);
		
		byte buf[] = new byte[8192];
		while(fis.read(buf)!=-1){
			fos.write(buf);			
		}
		fis.close();
		fos.flush();
		fos.close();
		}		
}

Alles was in der TextArea angezeigt werden soll, schreibt er erst nach der kompletten Abarbeitung rein.
Wäre schön wenn er auch mir am Anfang wenigstens schreibt:
("Bitte warten bis Formatierung der Diskette beendet ist")

Hoffe Ihr könnt mir weiterhelfen. Vielen dank auf jeden fall schon einmal. MFG Alex
 
B

Beni

Gast
Erkundige dich was "Threads" sein, denn solch einer benötigst du.

Ein Beispiel gibts in unserer FAQ.
 

Bert Brenner

Bekanntes Mitglied
So wie es aussieht setzt du das waitFor im EventThread ab, und der ist dann blockiert bis das formatieren abgeschlossen ist.
 

Magic-Alex

Mitglied
Danke für die schnellen Antworten...das hab ich mir auch schon fast so gedacht. Nur ist es für mich auch wichtig, das meine Anwedung erst mit dem schreiben beginnt, wenn das formatieren abgeschlossen ist.

Wie kann ich nun umgehen, dass die ganze Anwenung gesperrt bleibt?

Alex
 

KISS

Bekanntes Mitglied
dein problem ist das format auf stderr oder stdout schreibt. da diese streams nie ausgelesen werden, beendet sich der prozess nie. also alles in einen thread packen und aout+err stream auslesen
 
B

bygones

Gast
noch was zu wait und waitFor. IMMER innerhalb einer Schleife aufrufen !

Testing the condition before waiting and skipping the wait if the condition already holds are necessary to ensure liveness. If the condiftion already holds and notify (notfiyAll) method has already been invoked before a thread waits, there is no guarantee that the thread will ever waken from the wait.
Testing the condition after waiting and waiting again if the condition does not hold are necessary to ensure safety. If the thread proceeds with the action when the condition does not hold, it can destroy the invariants protected by the lock.....
 

KISS

Bekanntes Mitglied
genau, damit man sich beim consumer/producer pattern auch fein in den fuss schiesst (gut, mit der 1.5 macht man es eh anders)
 

KSG9|sebastian

Top Contributor
ungefähr so:

Code:
class ProcessRunner implements Runnable{
   private String cmd;
   public ProcessRunner(String cmd){
      this.cmd = cmd;
   }
   public void run(){
      Process p = Runtime.getRuntime().exec(cmd);
      p.waitFor();
      this.interrupt();
   }
}

Im Hauptprogramm dann:

Code:
Thread processRunner = new Thread(new ProcessRunner("cmd befehl"));
processRunner.start();

while(!processRunner.isInterrupted()){
   //status in textarea
}
 

KISS

Bekanntes Mitglied
und ebend das ist nicht deterministisch
vgl http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html
section Why Runtime.exec() hangs
liest hier garniemand die vorposts?

besonders fein
"Is this just a case of programmers not reading the documentation, as implied in the oft-quoted advice: read the fine manual (RTFM)? The answer is partially yes. In this case, reading the Javadoc would get you halfway there; it explains that you need to handle the streams to your external process, but it does not tell you how."
 
G

Gast

Gast
Verstehe ich das nun richtig, auch wenn ein externe Process
nur Daten ins Dateien schreibt, muss ich die stdout und stderr Ströme behandeln?
Würde damit folgendes Behandlung ausreichen?

<code>
...
Process p = Runtime.exex("xxx.exe");
p.getgetErrorStream().close();
p.getInputStream().close();
p.waitFor();
...
</code>

Danke schonmal ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Java Programm ordnet meine Objecte immer falsch an Java Basics - Anfänger-Themen 4
W Streams in Java und was bedeutet meine Konsolen-Ausgabe? Java Basics - Anfänger-Themen 4
WPS1000 Input/Output Wie aktiviere ich den Daten Transfer von der RS232 in meine Java Applikation Java Basics - Anfänger-Themen 2
S Meine Java "Wahrsagerin" Java Basics - Anfänger-Themen 9
M Meine erste Java Programmierung funzt nicht :-( Java Basics - Anfänger-Themen 34
L Warum erkennt java meine methode nicht? Java Basics - Anfänger-Themen 17
A Möchte Java - Chat in meine Homepage einbinden. Java Basics - Anfänger-Themen 4
G wie meine java applikation installierbar machen? Java Basics - Anfänger-Themen 11
P meine java applets laufen nicht bei meinen freunden Java Basics - Anfänger-Themen 5
C Rechnen mit Brüchen, ist meine Lösung soweit richtig? Java Basics - Anfänger-Themen 4
P Wie kann ich meine Keylistener Klasse unterscheiden lassen, von welcher "Quelle" der Input kommt? Java Basics - Anfänger-Themen 2
A Methoden Guten Tag , ich wollte so machen dass wenn meine frog an eine fly/bee geht dann an meine Tafel geht der zahl +1 hoch. Java Basics - Anfänger-Themen 2
T Meine Klasse wird nicht gefunden Java Basics - Anfänger-Themen 1
J Meine Mails gehen nicht raus Java Basics - Anfänger-Themen 8
frager2345 Warum muss ich hier im Konstruktor meine Exeption nicht abfangen ? Java Basics - Anfänger-Themen 4
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
sserio Wieso werden nicht alle Primzahlen bis 1000 in meine Liste gepackt ? Java Basics - Anfänger-Themen 8
C60 Methoden Main-Methode erkennt meine Arrays nicht. Java Basics - Anfänger-Themen 7
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
O Warum ist meine Antwort falsch? Java Basics - Anfänger-Themen 3
E Meine JCombobox werte an ohne selectiert zu haben Java Basics - Anfänger-Themen 6
Zrebna Umgebungsvariable Wieso wird meine verwendete JDK-Version in der Prompt nicht erkannt? Java Basics - Anfänger-Themen 6
L Meine erste eigene Exception Klasse Java Basics - Anfänger-Themen 10
B Sind meine If-Statements richtig angesetzt ? Java Basics - Anfänger-Themen 27
N Wie kann ich eine meine Variable Final machen? Java Basics - Anfänger-Themen 1
N Klassen Warum kann meine Klasse nicht auf Methoden der anderen Klasse zugreifen? Java Basics - Anfänger-Themen 6
L Worauf muss ich achten, wenn ich externe Bibliotheken für meine Anwendungen verwende? Java Basics - Anfänger-Themen 6
B Warum werden meine System.out.println's übersprungen? Java Basics - Anfänger-Themen 9
W Wie kann ich meine Methode aufrufen? Java Basics - Anfänger-Themen 29
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
H Meine Tabelle befüllen in .fxml Java Basics - Anfänger-Themen 16
E Warum kann ich meine jar-Datei nicht öffnen Java Basics - Anfänger-Themen 20
T Rekursion Warum bricht meine Funktion nicht ab Java Basics - Anfänger-Themen 4
C Ich brauche hilfe für meine Klausur Java Basics - Anfänger-Themen 13
W Wie lasse ich meine Ausgabe nach dem Lesen verschwinden ? Java Basics - Anfänger-Themen 1
W Warum funktioniert meine if Anweisung nicht? Java Basics - Anfänger-Themen 8
R Meine Ratemaschine Java Basics - Anfänger-Themen 3
V Warum speichert meine String-Variable nummerische Werte? Java Basics - Anfänger-Themen 3
V Erste Schritte Warum geht meine continue Anweisung nicht? Java Basics - Anfänger-Themen 8
GreenTeaYT HashMap dupliziert meine Elemente? Java Basics - Anfänger-Themen 2
B Ist meine Klasse richtig kommentiert? Java Basics - Anfänger-Themen 2
J Erste Schritte Vorsicht Spaghetti-Code! Wie verschachtel ich meine If-Anweisung??? Java Basics - Anfänger-Themen 4
snipesss Eclipse Neon findet meine Projekte nicht? Java Basics - Anfänger-Themen 1
snipesss IDE findet meine .txt Datei nicht! Java Basics - Anfänger-Themen 12
J Verstehe meine HashSet Ausgabe nicht Java Basics - Anfänger-Themen 5
E Erste Schritte [Noob] Warum geht meine For-Schleife nicht? Java Basics - Anfänger-Themen 2
E Erste Schritte [Noob-Frage] Meine If-Abfrage macht nicht, was sie soll... Java Basics - Anfänger-Themen 2
J Erste Schritte .class datei in meine form inkludieren Java Basics - Anfänger-Themen 3
D Wie bekomme ich meine Ausgabe in Form von "2^x" hin? Java Basics - Anfänger-Themen 1
Z Fibonacci rekursiv meine Erklärung stimmt so? Java Basics - Anfänger-Themen 2
C Meine erste Funktion Java Basics - Anfänger-Themen 12
A Meine erste Bibliothek erstellen Java Basics - Anfänger-Themen 24
Z Meine ersten Gehversuche Java Basics - Anfänger-Themen 11
Dit_ Ich kenne meine Koordinaten. Wo bin ich? Java Basics - Anfänger-Themen 2
K Klassen Meine Klasse wird nicht anerkannt Java Basics - Anfänger-Themen 7
M Suche Korrektor für meine Lösung (FH: Java1 - Übungsklausur) Java Basics - Anfänger-Themen 4
D Wie kann meine Klasse in ein JPanel zeichnen? Java Basics - Anfänger-Themen 14
J Datentypen Meine Hashliste ist nicht unique Java Basics - Anfänger-Themen 5
S OOP Wie muss meine Klasse zu dieser main aussehen? Java Basics - Anfänger-Themen 5
C Denkanstoss für meine Auswertung Java Basics - Anfänger-Themen 5
S Irgendwie kann ich meine Eclipse Projekte nicht mehr veraendern..? Java Basics - Anfänger-Themen 5
M Wo sind meine double-Zahlen? Java Basics - Anfänger-Themen 2
A Hilfe meine Titel werden alle abgelehnt Java Basics - Anfänger-Themen 4
K Wieso schaltet meine CheckBox von selbst um ? Java Basics - Anfänger-Themen 31
K Warum adiert meine Methode nicht die eins ? Java Basics - Anfänger-Themen 19
K Warum wird meine Graphik zwei Mal gezeichnet ? Java Basics - Anfänger-Themen 12
Kr0e Eclips + JOGL -> Wo ist meine MAIN-Funktion hin ? Java Basics - Anfänger-Themen 9
R Meine erste Klasse: Punkt Java Basics - Anfänger-Themen 3
U Habe meine .class files gelöscht. Java Basics - Anfänger-Themen 3
gummibaerchen Methode überschreibt meine Variable Java Basics - Anfänger-Themen 5
N Programm das mir anzeigt wo meine Freundin ist. Java Basics - Anfänger-Themen 10
Schandro Meine Fragensammlung Java Basics - Anfänger-Themen 9
S daten per url in meine Klasse? Java Basics - Anfänger-Themen 12
A meine eigene IO Klasse Java Basics - Anfänger-Themen 3
D Meine SetMethode geht nicht || Fenster schließen Java Basics - Anfänger-Themen 3
M wie kann ich meine Projekte auf einen stick speichern? Java Basics - Anfänger-Themen 6
S Wie ist meine Strucktur Java Basics - Anfänger-Themen 11
F Eingabe darf nur 1 oder 0 sein. Meine Lösung macht Probleme. Java Basics - Anfänger-Themen 8
M meine ersten versuche Java Basics - Anfänger-Themen 8
M wie pack ich das swt in meine *.jar Java Basics - Anfänger-Themen 8
S ich stör schon widr wegen meine gui Java Basics - Anfänger-Themen 2
R Welches inferface und somit welche IP benutzt meine JVM? Java Basics - Anfänger-Themen 2
G Meine erste IF Abfrage Java Basics - Anfänger-Themen 11
R BorderLayout macht meine Zeichnung kaputt Java Basics - Anfänger-Themen 14
A Parsen einer XML-Datei: Wo sind meine Start-Tags??? Java Basics - Anfänger-Themen 22
A Buttons für meine Homepage Java Basics - Anfänger-Themen 2
G Klassen: Wann initialisiere ich wo meine Variabeln Java Basics - Anfänger-Themen 6
K Mein Pc will meine Programme nicht kompilieren Java Basics - Anfänger-Themen 2
J Warum funktioniert meine Umwandlung nicht? Java Basics - Anfänger-Themen 3
G Public class??? Findet meine Klasse nicht. Java Basics - Anfänger-Themen 5
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22

Ähnliche Java Themen

Neue Themen


Oben