Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 24

Thema: Systemaufruf

  1. #1
    Registrierter Benutzer
    Registriert seit
    17.06.2006
    Beiträge
    61

    Systemaufruf

    Hallo
    ich möchte mit meinem java-programm aus windows heraus pdflatex aufrufen.
    jetzt habe ich auch schon was programmiert, was natürlich nicht funktioniert :-(
    die wenigen beispiele dazu, die ich im netz gefunden habe sind alle zu unix.
    bevor ich mir weiter den kopf zerbreche: geht das mit windows überhaupt???
    gruß katrin

  2. #2
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    377
    Zeig mal was du schon hast.
    Amilo D - 2,8 Ghz - ATI Radeon 9000
    Debian GNU/Linux 3.1 (Sarge)

  3. #3
    Registrierter Benutzer
    Registriert seit
    17.06.2006
    Beiträge
    61
    hier mein programm:

    import java.io.*;
    public class Pdf {
    static Runtime RT=null;
    static Process PR=null;

    public static void pdferstellen(){
    RT=Runtime.getRuntime();
    try{
    PR=RT.exec("pdflatex test2.tex");
    if(PR!=null){
    System.out.println("PDF-Datei erstellt");

    }
    }
    catch(java.io.IOException e){
    System.out.println("Fehler:"+e.toString());
    }
    System.exit( 0 );
    }
    public static void main (String args[]){
    pdferstellen();
    }
    }

  4. #4
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Sieht nicht schlecht aus - wo liegt genau das Problem? (Fehlermeldungen,...)

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  5. #5
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Mögliche Probleme die ich da sehe:
    a) er findet pdflatex gar nicht -> absoluten Pfad verwenden oder besser den Ordner von pdflatex in PATH aufnehmen
    b) er nimmt den String den du da übergibst - "pdflatex file.tex" - falsch auseinander (in Argumente und Programmname aufteilen). Das sollte hier noch kein Problem sein, könnte aber eins werden wenn du z.B. Dateinamen mit leerzeichen als argument übergibst.
    c) Was bei mir mal war (recht merkwürdig) ist dass unter Windows das von Java ausgeführte Kommandozeilenprogramm (bei mir war das cdrecord) nur dann lief wenn ich andauernd die beiden Streams stdout und stderr auf denen cdrecord was ausgab auslas. Sonst blieb das Programm einfach stehen bzw. fing gar nicht erst richtig an.
    Wobei ich jetzt mal behaupte das war ein recht fetter bug in java - eventuell ist das heutzutage nicht mehr so. Aber versuchs mal

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  6. #6
    Registrierter Benutzer
    Registriert seit
    17.06.2006
    Beiträge
    61
    da die if-abfrage true ist(er gibt pdf-datei erstellt aus) , dachte ich er hätte was gemacht, aber er hat die pdf-datei nicht wirklich erstellt.
    aus cmd heraus macht er es, das habe ich gerade getestet.
    aber mit dem java-prog erhalte ich folgende log-file:
    This is pdfeTeXk, Version 3.141592-1.11a-2.1 (Web2c 7.5.2) (format=pdflatex 2006.7.12) 21 JUL 2006 17:17
    entering extended mode
    %&-line parsing enabled.
    (c:/Programme/TeXLive/texmf/web2c/cp8bit.tcx)
    **test2.tex
    (./test2.tex{c:/Programme/TeXLive/texmf-var/pdftex/config/pdftex.cfg
    Error: pdflatex.exe (file c:/Programme/TeXLive/texmf-var/pdftex/config/pdftex.c
    fg): fflush() failed
    ==> Fatal error occurred, the output PDF file is not finished!

    dann trifft fall a) zu, oder?? wo kann ich das in die Path schreiben??
    danke katrin

  7. #7
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Das sieht eher nach nem Fehler in der .tex-Datei aus...

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  8. #8
    Registrierter Benutzer
    Registriert seit
    17.06.2006
    Beiträge
    61
    wenn ich aber doch das ganze aus der cmd mache, erhalte ich eine pdf-datei und folgende log.
    gruß katrin

  9. #9
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Und wenn du einfach (ohne den ganzen restlichen Code) ein

    Code:
    try{
      static final String[] arg = {"pdflatex","test2.tex"};
      this.getRuntime().exec(arg);
    }catch...
    Machst?

    MfG Bischi

    PS: Das static final kannst du wahrscheinlich auch weglassen, bin mir diesbezüglich nicht so ganz sicher...

    PS2: Vielleicht musst du das dann so ändern:

    String[] arg = new String[2];
    arg[0]=...
    arg[1]=...
    Geändert von bischi (21-07-2006 um 18:50 Uhr)

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  10. #10
    Registrierter Benutzer
    Registriert seit
    17.06.2006
    Beiträge
    61
    hallo
    musste static final weglassen und this kann ich nicht im static Kontext benutzen. deswegen habe ich dann folgendes gemacht
    String[] arg = {"pdflatex","test2.tex"};
    RT.exec(arg);
    aber da erhalte ich dieselbe log-datei wie vorher
    aber generell müsste sowas schon gehen oder?

  11. #11
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Bei mir gehts auch nicht:

    "End of file at terminal.."

    Besserer Vorschlag: Erstell ne batch/Shellscript-Datei, aus welcher du ein Java-Proggi startest, welches eine Bat/ShScript-Datei erstellt, die du nach beenden des Java-Proggi aus der ersten aufrufst.

    also etwa so:

    --- programm.bat ---
    java meinJavaProgramm // erzeugt compile.bat
    compile

    --- compile.bat muss etwa so aussehen ---
    pdflatex beispiel.tex


    Ist zwar nicht 100% sauber, funktioniert aber einwandfrei! (hab bei mir ne ähnliche Lösung am laufen...)

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  12. #12
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Bei exec wird er Prozess gestartet.

    Was sagt der Exit Value des Process? Bzw vermisse ich einen waitFor Aufruf um auf das Ende des Aufrufs zu warten.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  13. #13
    Registrierter Benutzer
    Registriert seit
    17.06.2006
    Beiträge
    61
    hallo
    ich mache systemaufrufe das erstemal und hatte mich am buch "java für Fortgeschrittene"von hendrich orientiert, da hatte ich nichts vom waitfor aufruf gelesen.. wie geht das?
    wer ist der exit value?
    danke katrin

  14. #14
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    377
    Waitfor ist im Umgang immer eine gute Idee. Damit wartest du so lange bis der Prozess den du erzeugt hast auch wirklich beendet ist. Sonst kannst du dir nie sicher sein ob auch wirklich das Programm beendet wurde (naja, haengt immer vom Fall ab).

    Der Exit Value eines Prozesses ist der Rueckgabewert der main-Funktion (Auch wenn Java's main eigentlich nichts (void) zurueckliefert so ist dieser doch vorhanden). Siehe dazu
    http://java.sun.com/j2se/1.5.0/docs/api/
    Amilo D - 2,8 Ghz - ATI Radeon 9000
    Debian GNU/Linux 3.1 (Sarge)

  15. #15
    Registrierter Benutzer
    Registriert seit
    17.06.2006
    Beiträge
    61
    also müsste ich nach
    String[] arg = {"pdflatex","test2.tex"};
    RT.exec(arg);
    eine if-abfrage machen:
    if(RT.waitfor()==0) System.exit();

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •