1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

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

Dieses Thema im Forum "OS X-Developer" wurde erstellt von MikeZ, 30.09.09.

  1. MikeZ

    MikeZ Stina Lohmann

    Dabei seit:
    19.01.05
    Beiträge:
    1.022
    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
     
  2. AgentSmith

    AgentSmith Hochzeitsapfel

    Dabei seit:
    15.07.07
    Beiträge:
    9.361
    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.
     
  3. MikeZ

    MikeZ Stina Lohmann

    Dabei seit:
    19.01.05
    Beiträge:
    1.022
    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.
     
  4. MACRASSI

    MACRASSI Gelbe Schleswiger Reinette

    Dabei seit:
    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
     

Diese Seite empfehlen