• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

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
 

AgentSmith

Hochzeitsapfel
Registriert
15.07.07
Beiträge
9.304
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.
 

MikeZ

Freiherr von Berlepsch
Registriert
19.01.05
Beiträge
1.116
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.
 

MACRASSI

Gelbe Schleswiger Reinette
Registriert
21.11.04
Beiträge
1.754
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