Avatar billede nkoenig Nybegynder
05. december 2003 - 15:50 Der er 9 kommentarer og
1 løsning

hvordan bruger man run.exec i Java?

Hej jeg har problemer med run.exec.
Jeg ville gerne have mit program til at kompilere en tex-fil, dernæst skulle den danne en pdf-fil påbaggrund af den genererede dvi-fil?

Problemet er at efter jeg har kaldt run.exec() første gang så vil jeg kalde metoden igen og bruge den fil som det første kald har skabt, men anden gang jeg kalder metoden giver den mig fejlmeddelelse om at filen ikke findes,
Avatar billede arne_v Ekspert
05. december 2003 - 15:57 #1
Windows eller Linux ?
Avatar billede arne_v Ekspert
05. december 2003 - 16:05 #2
Hvis det ikke er en EXE man vil køre skal man på Windows bruge:

Runtime.getRuntime().exec("cmd /c kommando");

Hvis du skal have argumenter med bør du bruge exec varianten
med et argument array.
Avatar billede nkoenig Nybegynder
05. december 2003 - 18:40 #3
Mit problem er ikke at køre et enkelt program men at bruge output-filen fra et program som argument til et andet program, fordi jeg ønsker at danne en tex fil kompilere den så jeg får en dvi-fil og sidenhen lave denne om til en pdf.
Men måske er der en lettere måde at gøre det hele på?
Avatar billede nkoenig Nybegynder
05. december 2003 - 18:42 #4
Windows desvære:(
Avatar billede arne_v Ekspert
05. december 2003 - 19:31 #5
Det burde sagtens kunne lade sig gøre.
Avatar billede arne_v Ekspert
05. december 2003 - 19:34 #6
Eksempel:

public class X {
  public static void main(String[] args) throws Exception {
      String[] cmd = { "cmd", "/c", "dir", ">", "z.txt" };
      Runtime.getRuntime().exec(cmd);
  }
}
Avatar billede nkoenig Nybegynder
05. december 2003 - 20:45 #7
Du må meget undskylde at jeg er så langsom, men her er den kode jeg har problemer med, da jeg ikke umiddelbart kan se hvordan din kommentar løser mit problem.

String[] argsArray = {latexCommand, texArgument};
String[] argsArray2 = {dvipdfmCommand, dviArgument};
String[] argsArray3 = {acrobatCommand, pdfArgument};
try {
  Runtime.getRuntime().exec(argsArray); //virker fint
  Runtime.getRuntime().exec(argsArray2); //virker fint
  //nedenstående virker først anden gang jeg kører programmet?
  //jeg går udfra det er fordi ovenstående ikke når at skrive den fil færdig
  //som skal bruges som arguement i nedenstående kald.

  Runtime.getRuntime().exec(argsArray3);
} catch (IOException io) {
  System.out.println(io.getMessage());
}
Avatar billede arne_v Ekspert
05. december 2003 - 21:06 #8
OK - så er der ikke nogle af mine hidtidige forslag du kan bruge.

Ny forslag:

Erstat:

Runtime.getRuntime().exec(args);

med:

Process p = Runtime.getRuntime().exec(args);
BufferedInputStream bis = new BufferedInputStream(p.getInputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(bis));
BufferedInputStream bes = new BufferedInputStream(p.getErrorStream());
BufferedReader err = new BufferedReader(new InputStreamReader(bes));
String line;
while ((line = in.readLine()) != null) {
  System.out.println(line);
}
while ((line = err.readLine()) != null) {
  System.out.println(line);
}
Avatar billede nkoenig Nybegynder
05. december 2003 - 23:21 #9
Hej Arne_v tusinde tak, nu virker det hele.
Jeg er nybegynder på eksperten, så hvordan får du så dine point?
Er det noget med at du skal sende mig et svar eller hvordan?
Avatar billede arne_v Ekspert
05. december 2003 - 23:24 #10
Jeps
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester