Java Java und Batch

Helios co.

Lt. Commander
Registriert
März 2005
Beiträge
1.863
Hallo @all,

ich habe ien Java Programm, bei dem ich in einer Methode mittels batch (Runtime.getRuntime().exec etc.) ein batch-fiel ausführe. Dieses stratet ein Programm. So weit klappt das alles auch richtig.

Nur nach dem Start des Programms soll eine andere Methode aufgerufen werden, die dieses Programm nutzt (d.h. es werden Parameter etc übergeben). Jetzt habe ich aber das Problem, dass die erste Methdode (also der Start des Programms) etwas dauert.
D.h. java wartet nicht bis das Programm fertig geladen wurde, bevor es die 2te Methode aufruft. Das führt natürlich zu einem Fehler.

Gibt es eine Möglichkeit Java dazu zu bewegen so lange zu warten, bis das Programm geladen wurde?
Im Netz habe ich auf anhieb keine gefunden, und wäre daher dankbar für jeden Rat!

Thx

----------------------------------------
Nachtrag:

Problem ist gelöst. Ich musste folgendes machen:

String cstring = new String("meineBtach");
Process p = Runtime.getRuntime().exec(cstring);
try{
p.waitFor();
}
catch (InterruptedException ie) {
ie.printStackTrace();
}

-------------------------------------

Nachtrag:

Es hat sich jetzt jedoch ein weiteres Problem ergeben. Ich nutze folgenden Code um eine .bat Datei zu starten. Führe ich das Ding von Hand aus, so klappt das einwandfrei. Von Java aus bekomme ich jedoch eine Fehlermeldung:

Code:
try {
			String[] para = {"cmd ", "/c ", "start ", "C:\\myjags.bat"};
			ProcessBuilder processBuilder = new ProcessBuilder(para);
			final Process process = processBuilder.start();
			
			Scanner s = new Scanner(process.getErrorStream());
			while(s.hasNext()){
				System.out.print(s.next()+" ");
			}
						
			process.waitFor();
		
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

Die Fehlermeldung lautet:
Die Syntax f?r den Dateinamen, Verzeichnisnamen oder die Datentr„gerbezeichnung ist falsch.

Die .bat Datei sieht dabei wie folgt aus:
F:
cd JAGS
cd bin
jags C:\JAGS\myscript.txt

Ich bin langsam verzweifelt. Hat jemand ien Idee woran es liegen könnte?
 
Zuletzt bearbeitet:
Versuchs mal mit
try
{
command = "\""+"C:\\myjags.bat" + "\"";
Process proc = Runtime.getRuntime().exec(command);
}
catch (IOException e)
{
e.printStackTrace();
}
 
Vielen Dank für die erste Antwort :)

So wie du es vorschlägst habe ich es auch schon ausprobiert, doch leider ohne Erfolg.
Da es nahe liegt, dass das Problem mit der Ausführung der .bat zusammenhängt, habe ich die bat in eine exe konvertiert, und es funzt.

Damit ist mir jedoch nur bedingt geholfen, da ich die .bat dynamisch generieren muss (ständig dann noch den Konverter anzuwerfen ist alles andere als elegant und sinnvoll). Ich habe auch im Netz gelesen, dass dieses Problem durchaus bekannt ist. Eine Lösung dafür habe ich jedoch nicht gefunden.

Daher wäre ich für weitere Ratschläge wirklich dankbar!
 
Ich bin mir nicht ganz sicher, ob das unter Windows auch geht, aber kannst du nicht den Kommandointerpreter mit der Batchfile als Parameter aufrufen. Also irgendwie so:

Code:
cmd.exe test.bat
 
Falls das so gemeint war:

Code:
	String command = "cmd.exe C:\\test.bat";
		Process proc = Runtime.getRuntime().exec(command);

dann geht das leider auch nicht. :(

Auch habe ich folgendes ausprobiert:

Code:
	String command = "cmd.exe /c C:\\test.bat";
		Process proc = Runtime.getRuntime().exec(command);
Auch ohne Erfolg.
Vertausche ich jedoch die bat gegen die exe-Version, so funzt das.

Was auhc nicht gefunzt hat ist folgendes:
Code:
String[] command = {"cmd", "/c", "c:/test.bat"};
 
Zuletzt bearbeitet:
Code:
String[] para = {"cmd", "/c", "C:\\myjags.bat"};
ProcessBuilder processBuilder = new ProcessBuilder(para);
final Process process = processBuilder.start();

//Scanner s = new Scanner(process.getErrorStream());
Scanner s = new Scanner(process.getInputStream());
while(s.hasNext()){
	System.out.print(s.next()+" ");
}

process.waitFor();
geht bei mir einwandfrei (Javaversion 1.6.0_10)! Hab in die myjags.bat einfach ein "dir" geschrieben und ich erhalte die Ausgabe damit.
 
Zuletzt bearbeitet:
LÖSUNG:

Das Problem lag an der batch. Bzw. an Eclipse. Per Standard arbeitet Eclipse immer auf dem Workspace. Diese liegt bei mir auf der Partition F:

Das Tools welches per batch gestartet werden sollte liegt ebenfalls auf F:

In der batch stand bei mir ja: F:\blabla\...

Wenn man sich aber in F:\WorkSpace befindet, dann geht der AUfruf F:\blabla... natürlich schief.
D.h. in der batch am Anfang erst einmal cd\ eintragen!


Vielen Dank für die zahlreichen Posts!
 
Zuletzt bearbeitet:
Zurück
Oben