Hilfe!! Java Prozess startet nicht richtig :(



  • 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):

    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



  • Hi

    Das fällt mir so ein:
    Muss den String[] pngCall ein Array sein?
    Kann der Aufruf nicht in einem ganzen String sein?

    Bei Runtime.getRuntime ist auch der Ausführungsort wichtig. Schau dir mal den 2ten und 3ten Parameter an.

    Gruß



  • Exit 1 ist ja ein Fehler im Programm. Also stimmt der Parameter mit dem du das Programm aufrufen tust nicht.



  • Danke erstmal!

    Das mit dem Array mache ich an verschiedenen Stellen im Programm erfolgreich so.

    Das mit der falschen Argumenten dachte ich auch erst, aber warum funktioniert dann exakt die gleiche Zeile in die Kommandozeile eingegeben problemlos?

    Die beiden anderen Variablen werde ich mir mal anschauen. Aber was soll ich da noch groß ändern, ich übergebe ja eh die absoluten Pfade zu den ganzen Dateien... Und ein Working Directory ist auch gesetzt.

    Ich hab auch mal probiert das Programm mit Admin-Rechten auszuführen um sicher zu stellen, dass ich für alle Ordner Schreibrechte habe. Hat genausowenig geklappt...



  • Es ist echt komisch... Das hier...

    String[] pngCall = {pngExe.toString(), "convert", "-list", "format"};
    proc = Runtime.getRuntime().exec(pngCall);
    

    ...klappt perfekt, das hier:

    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.



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

    willst ja

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

    aufrufen und nicht

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

    Doku:

    cmdarray - array containing the command to call and its arguments.

    (http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Runtime.html#exec(java.lang.String[]))

    Gruß



  • Daran liegt es leider nicht. Es klappt ja nichtmal sowas:

    String[] pngCall = {pngExe.toString(), "convert", input, output};
    

    Wobei input/output der Pfad wie im ersten Beispiel ist...


Anmelden zum Antworten