Avatar billede mummikiks Nybegynder
17. november 2005 - 12:40 Der er 10 kommentarer og
1 løsning

Kald ekstern executeable fil med argumenter

Hej Experter

Jeg har lavet nedenstående kode, hvor jeg kalder en ekstern kommando. Jeg får returneret returværdien, hvilket fungere fint.

Jeg skal derudover kalde exe-filen med argumenter, men nedenstående kode virker ikke.

Hvis jeg kalder compile.exe fra en kommandoprompt virker det fint, hvor funktionen returnere 13.

public String compile(String deviceName)
    {
        String msg = null;
        int exitVal = 0;
        try
        {           
                       
            Runtime rt = Runtime.getRuntime();
            Process proc = rt.exec("compiler.exe alarm_eng.j");
            exitVal = proc.waitFor();
            System.out.println(exitVal);
                     
        }
        catch (Throwable t)
          {
            t.printStackTrace();
          }
       
        if (exitVal == 65536){
            msg = "The compiler returned succesfull for the device: " + deviceName;
        }
        else if (exitVal < 65536){
            msg = "The compiler returned with a syntax error on line " + exitVal + " for device " + deviceName;
        }
      return msg;             
    }
Avatar billede soreno Praktikant
17. november 2005 - 12:46 #1
Process proc = rt.exec("compiler.exe alarm_eng.j");

Skal vist være:
Process proc = rt.exec({"compiler.exe", "alarm_eng.j"});

Kig docs for Runtime:
Process exec(String[] cmdarray)
Avatar billede arne_v Ekspert
17. november 2005 - 12:54 #2
for at være god Java

men hele molevitten i en streng plejer at virke på Windows (men det virker ikke på Linux)
Avatar billede mummikiks Nybegynder
17. november 2005 - 13:26 #3
Ja og har lige prøvet følgende i stedet..

  Runtime rt = Runtime.getRuntime();
            Process proc = rt.exec(new String[] {
                    "compiler.exe",
                    "alarm_eng.j"
                    });
            exitVal = proc.waitFor();
Avatar billede arne_v Ekspert
17. november 2005 - 13:33 #4
skriver compileren til output ? hvis ja så skulle du måske læse det !

prøv evt.:
  cmd /c cpompiler.exe alarm_eng.j
Avatar billede mummikiks Nybegynder
17. november 2005 - 14:25 #5
Hmm det virker stadig ikke.

min mainfunktion i compiler.exe er:

main (int argc, char **argv) {

}

Compileren tager og compiler alarm_eng.j og gemmer resultatet i en ny fil. Som tidligere nævnt virker det fint fra prompten hvor jeg skriver compiler alarm_eng.j
Avatar billede arne_v Ekspert
17. november 2005 - 15:40 #6
skriver den compiler noget til output ?

passer default dir ?
Avatar billede mummikiks Nybegynder
17. november 2005 - 15:43 #7
Ja der ligger nogle printfer i den, samt at der bliver udskrevet til en fil!!! compileren og filen ligger i samme mappe som sourcefilerne. Andre exe filer kan også køres, men kan blot ike tage argumenter. Er det et problem med printfer og udskrivning til fil.
Avatar billede arne_v Ekspert
17. november 2005 - 15:45 #8
fil : ikke noget problem

printf : skal muligvis læses (både for at give dig et hint om fejl og for at få
bufferen tømt)
Avatar billede arne_v Ekspert
17. november 2005 - 15:46 #9
som i:

import java.io.*;

public class Ping {
  public static void main(String[] args) throws Exception {
      Process p = Runtime.getRuntime().exec("ping tv2.dk");
      BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
      String line;
      while((line = br.readLine()) != null) {
        System.out.println(line);
      }
  }
}
Avatar billede mummikiks Nybegynder
19. november 2005 - 00:45 #10
Tak Arne...den smed fint informationen ud. Jeg har nu konstrueret programmet således at jeg bruger informationerne der kommer ind til line. Smid et svar og du får pointene.
Avatar billede arne_v Ekspert
19. november 2005 - 09:09 #11
ok
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