• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

Java: Prozess startet im Terminal, über Runtime.exec(..) aber nicht?!

MikeZ

Freiherr von Berlepsch
Registriert
19.01.05
Beiträge
1.116
Hallo,
ich möchte aus meinem Java-Programm eine PDF in eine PNG-Datei konvertieren. Wenn ich folgendes in Kommandozeile gebe, klappt es:

/opt/local/bin/gm convert -trim -density 100 /Users/blah/temp.pdf /Users/blah/temp.png

Den Aufruf des Programms habe ich so gemacht: (auf die relevanten Sachen gekürzt):

Code:
String[] pngCall = {pngExe.toString(), "convert", "-trim", "-density "+dpi, pdfInput.getAbsolutePath(),
                                pngOutput.getAbsolutePath()};

            for (String str:pngCall) {
                System.out.print(a+" ");
            }

            Process proc = null;
            try {
                proc = Runtime.getRuntime().exec(pngCall, null, tempDir);
            } catch (Throwable t) {
                //...
            }
            
            try {
                System.out.println(proc.waitFor());

                java.io.InputStream is = proc.getInputStream();
                java.io.InputStreamReader isr = new java.io.InputStreamReader(is);
                java.io.BufferedReader br = new java.io.BufferedReader(isr);

                String str = "";

                while (null != (str = br.readLine())) {
                    System.out.println(str);
                }

                proc.destroy();
                br.close();
   //...

Das Programm gibt (bei der ersten For-Schleife) genau den gleichen Code aus, den ich auch in die Kommandozeile eingeben würde und der dort funktioniert, trotzdem klappt es nicht... Das Programm gibt den Exit Code 1 aus und macht nichts, soweit ich das beurteilen kann.

Hat mir einer einen Rat? Bin am verzweifeln...
Grüße,
Michael
 
Das Problem hatte ich auch mal. Da es nichts kritisches war und ich keinen Nerv hatte, mehr als fünf Minuten rumzuprobieren, habe ich damals einfach ein Shell-Skript mit dem Befehl schreiben lassen und das aufgerufen. Dirty Workaround, hat aber geklappt. Eine echte Lösung würde mich aber auch durchaus interessieren.
 
Das wäre eine Idee, aber wenn ich "schöner" hinkriegen könnte wär's ... schöner ;)

Es ist echt komisch... Das hier...
Code:
String[] pngCall = {pngExe.toString(), "convert", "-list", "format"};
proc = Runtime.getRuntime().exec(pngCall);

...klappt perfekt, das hier:

Code:
String[] pngCall = {pngExe.toString(), "convert", input, output};
proc = Runtime.getRuntime().exec(pngCall);

...nicht... Ich bin ratlos :(

Wie gesagt, wenn ich mir den Befehl in der Konsole ausgebe und in die Kommandozeile paste, klappt es.
 
Ich brauch eure Hilfe.
Ich hock jetzt stundenlang vor Google und find einfach nix.

Ich will einen bestimmten Befehl in einem Verzeichnis ausführen.

Code:
		String [] b = {"git log --graph --all"};
		String [] c = {};
		File f =  new File("/Users/bla/Documents/ein\\ ordner/");
		
		Process s = Runtime.getRuntime().exec(b, c, f);
		BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
		String line = br.readLine();
		while(line != null){
			System.out.println(line);
			line = br.readLine();
		}
		s.getInputStream().close();

Also, er soll den Befehl in einem Ordner ausführen, der aber ein Leerzeichen hat.
Es klappt einfach nicht. ich bekomme immer Directory not found.

Was soll ich machen?

Gruß Rasmus