2015-07-15 53 views
7

Chcę uruchomić kod skompilowany wcześniej. I tak skompilowałem, że nie ma znaczenia, jak skompilować, ale uruchomienie kodu jest problematyczne.Uruchamianie skompilowanego kodu Java w czasie wykonywania

My code.java

public class code{ 

    public static void main(String[] args) { 
     System.out.println("Hello, World"); 
    } 
} 

Potem skompilowany kod i code.class (w katalogu D://) została wygenerowana. Teraz chcę uruchomić ten skompilowany plik. Mój kod to:

import java.io.IOException; 
import java.io.InputStream; 

public class compiler { 
    public static void main(String[] args) { 
     final String dosCommand = "cmd /c java code"; 
     final String location = "D:\\"; 
     try { 
     final Process process = Runtime.getRuntime().exec(
      dosCommand + " " + location); 
     final InputStream in = process.getInputStream(); 
     int ch; 
     while((ch = in.read()) != -1) { 
      System.out.print((char)ch); 
     } 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } 
    } 
} 

Tutaj nie ma błędu, ale ten kod nic nie robi. Żadne cmd otwarte, nic. Gdzie się mylę? Co powinienem zrobić?

+1

Po pierwsze: nie używaj 'Runtime.exec()', użyj 'ProcessBuilder'. – fge

+0

Po drugie: wygląda na to, że kod, który chcesz uruchomić, daje wynik, który chcesz przechwycić; jeśli tak jest, nie uruchamiaj go w interpreter poleceń ... – fge

Odpowiedz

4

Bieżące polecenie cmd jest niepoprawne.

cmd /c java code D:/ /*this is not correct cmd command*/ 

powinno być

cmd /c java -cp D:/ code 

po uruchomieniu pliku .class w innym folderze, ale nie w bieżącym folderze używać -cp do Określa ścieżkę klasa

there is no error Nope rzeczywiście nie było. ale nie zostały one przechwycone. Aby uchwycić błędy, można użyć getErrorStream() przykładowy kod

public class compiler { 

    public static void main(String[] args) { 
     final String dosCommand = "cmd /c java -cp "; 
     final String classname = "code"; 
     final String location = "D:\\"; 
     try { 
      final Process process = Runtime.getRuntime().exec(dosCommand + location + " " + classname); 
      final InputStream in = process.getInputStream(); 
      final InputStream in2 = process.getErrorStream(); 
      int ch, ch2; 
      while ((ch = in.read()) != -1) { 
       System.out.print((char) ch); 
      } 
      while ((ch2 = in2.read()) != -1) { 
       System.out.print((char) ch2); // read error here 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+1

To działa! Dziękuję bardzo. –

+0

@ GürkanÇatak możesz przekazać parametry do pliku klasy. Na przykład, jeśli chcesz przekazać hello do 'code.class', możesz użyć' cmd/c java -cp D:/code hello' –

+0

Rozwiązałem już:) Dziękuję Ci. –

Powiązane problemy