So ungefaehr:
String[] arg = {"pdflatex","test2.tex"};
Process p = RT.exec(arg);
if( p.waitfor() == 0 )
System.out.println( "pdflatex ok" );
else {
System.out.println( "pdflatex error: " + p.exitValue );
System.exit( p.exitValue );
}
So ungefaehr:
String[] arg = {"pdflatex","test2.tex"};
Process p = RT.exec(arg);
if( p.waitfor() == 0 )
System.out.println( "pdflatex ok" );
else {
System.out.println( "pdflatex error: " + p.exitValue );
System.exit( p.exitValue );
}
Amilo D - 2,8 Ghz - ATI Radeon 9000
Debian GNU/Linux 3.1 (Sarge)
hallo
kann bitte mal jemand testen, ob das so funktioniert, das wäre echt lieb..
bei mir funktioniert es bis zum ps2pdf-aufruf, dass dieser aufruf nicht geht, liegt bei mir aber daran, dass er auch ohne java nicht funktioniert.
public class Pdf {
static Runtime RT=null;
static Process PR=null;
public static void pdferstellen(){
RT=Runtime.getRuntime();
try{
String[] arg = {"latex","test2"};
RT.exec(arg);
String[] args={"dvips", "test2.dvi"};
RT.exec(args);
String[] argsz={"ps2pdf", "test2.ps"};
RT.exec(argsz);
/*if(PR.waitFor()==0){
System.out.println("PDF-Datei erstellt");
}
else {
System.out.println( "pdflatex error: " + PR.exitValue() );
System.exit( PR.exitValue() );
}*/
}
catch(Exception e){
System.out.println("Fehler:"+e.toString());
}
System.exit( 0 );
}
public static void main (String args[]){
pdferstellen();
}
}
vielen dank, katrin
hallo
da ich den zweiten aufruf erst ausführen sollte wenn der erste beendet ist, dachte ich ich könnte das mit der if-abfrage machen.
allerdings bekomme ich jetzt eine fehlermeldung , die mir nix sagt. Fehler:java.lang.NullPointerException
d.h ja er müsste gar nicht erst in den try-block gehen, aber ohne der if-Abfrage führt er die proesse doch durch....
warum übergebe ich eigentlich dem exit() 0, ich habe das irgendwie so verstanden, dass diese methode mir diesen wert zurück gebt, jenachdem ob der prozess erfolgreich war?
gruß katrin
public class Pdf extends Ausgabe {
static Runtime RT=null;
static Process PR=null;
public static void pdferstellen(){
RT=Runtime.getRuntime();
try{
String[] arg = {"latex","test3"};
RT.exec(arg);
if(PR.waitFor()==0){
String[] args={"dvips", "test3.dvi"};
RT.exec(args);
}
else {
System.out.println( "latex error: " + PR.exitValue() );
System.exit( PR.exitValue() );
}
}
catch(Exception e){
System.out.println("Fehler:"+e.toString());
}
System.exit( 0 );
}
public static void main (String args[]){
pdferstellen();
}
}
Naja - das ist eine der häufigsten Fehlermeldungen und bedeutet, dass du auf irgend ein Objekt zugreifen möchtest, das nicht initialisiert wurde...Zitat von blaurot
Mal die entsprechende Zeile genauer anschauen,
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,...
danach wird PR doch gar nicht wieder benutzt ...Zitat von blaurot
String LArg = "\\batchmode \\input test3.tex";
String[] arg = {"latex", LArg};
PR=RT.exec(arg);
if(PR.waitFor()==0){ System.out.println("dvi-Datei erstellt"); }
else { System.out.println( "LaTeX error: " + PR.exitValue() );
System.exit( PR.exitValue() ); }
rc
Es fehlt die Zuweisung auf PR, daher ist es nullZitat von blaurot
System.exit gibt den übergebenen Wert am Programmende an den Aufrufer des Programms zurück, damit der eventuell je nach Wert anders reagieren kann.warum übergebe ich eigentlich dem exit() 0, ich habe das irgendwie so verstanden, dass diese methode mir diesen wert zurück gebt, jenachdem ob der prozess erfolgreich war?
Häufigster Anwendungsfall ist die Abarbeitung mehrerer zusammenhängender Befehle in einem Script bzw einer Batchdatei, wo abgebrochen werden soll, wenn einer der Verarbeitungsschritte nicht geklappt hat.
Übrigens, falls das Ziel deines Programms die Generierung eines PDF aus einer Latexdatei ist, sollte das doch viel einfacher in einem Schritt mittels pdflatex gehen, oder?
Ciao,
_
Qt/KDE Entwickler
Debian Benutzer
hallo
wahrscheinlich habt ihr recht und ich mache es zu kompliziert mit mehreren prozessen.
ich habe es jetzt nochmal mit der pltx.bat gemacht, jetzt habe ich nur das problem, das ich es nicht testen kann, weil mein ps2pdf nicht funktioniert(deswegen war ich auch auf die mehreren prozesse umgestiegen...)
mit pdflatex kann man dies nicht machen, da meine tex-datei balkendiagramme enthält.
ich habe mein programm trotzdem laufen lassen, kam auch keine fehlermeldung. aber da inm if und im else teil eine println-anweisung steht, müsste er doch auf jeden fall was ausgeben, es kommt aber garnix. das finde ich sehr merkwürdig.
gruß katrin
public class Pdf2 {
static Runtime RT=null;
static Process PR=null;
public static void pdferstellen(){
RT=Runtime.getRuntime();
try{
String[] arg = {"pltx.bat","test3"};
PR=RT.exec(arg);
if(PR.waitFor()==0){
System.out.println("Pdf-Datei erstellt");
}
else {
System.out.println( "latex error: " + PR.exitValue() );
System.exit( PR.exitValue() );
}
}
catch(Exception e){
System.out.println("Fehler:"+e.toString());
}
System.exit( 0 );
}
public static void main (String args[]){
pdferstellen();
}
}
String LArg = "\\batchmode \\input test3.tex";Zitat von blaurot
String[] arg = {"latex", LArg};
hatte ich dir doch extra geschrieben. Ansonsten hängt doch sofort das System, wenn TeX einen Fehler entdeckt und auf eine Eingabe wartet ...
angesehen davon verstehe ich deinen ganzen Aufstand nicht. Wenn dein ps2pdf nicht geht, dann ist dein GhostScript im Eimer, denn ps2pdf ist nichts weiter als ein Skript dafür. Installiere das aktuelle ghostscript und hoe dir ps2pdf (bei MiKTEX ist alles dabei) und fertig ist ...
rc
Vielleicht hilft dir ja auch dieser Thread weiter:
http://www.mrunix.de/forums/showthread.php?p=211428
Lesezeichen