2010-08-26 6 views
4
import java.io.*; 

public class Auto { 

    /** 
    * @param args 
    * @throws IOException 
    */ 
    public static void main(String[] args) throws IOException { 

     try { 
      Runtime.getRuntime().exec("javac C:/HelloWorld.java"); 
      Runtime.getRuntime().exec("java C:/HelloWorld > C:/out.txt"); 
      System.out.println("END"); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Ce programme est capable de compiler le fichier 'HelloWorld.java', mais ne l'exécute pas (HelloWorld). Quelqu'un pourrait-il me suggérer comment le faire fonctionner? Merci à l'avance! :) Aussi, si la sortie pouvait être prise dans un autre fichier texte, dites 'output.txt'.Compilation et exécution de code Java en utilisant Runtime # exec()

+1

Vous n'exécutez pas le fichier .java. Essayez 'java c:/HelloWorld'. –

+2

Il était pas la faute que je me suis intéressé à, je l'avais déjà rectifié, mais a affiché l'ancien code erroné par mistake.Sorry :) – ivorykoder

+0

s'il vous plaît me dire comment exécuter le programme – cafebabe1991

Répondre

4

Lorsque votre exécutons le programme java, vous devez dans votre répertoire racine du projet, et exécuter java package.to.ClassWhichContainsMainMethod

Runtime.getRuntime().exec() vous donnera un Process qui contient un OutputStream et un InpuStream à l'application exécutée.

Vous pouvez rediriger le contenu InputStream vers votre fichier journal.

Dans votre cas, j'utiliser cette exec: public Process exec(String command, String[] envp, File dir) comme ceci:

exec("java HelloWorld", null, new File("C:/")); 

Pour copier les données du fluxEntrée au fichier (code volé sur this post):

public runningMethod(){ 
    Process p = exec("java HelloWorld", null, new File("C:/")); 
    pipe(p.getInputStream(), new FileOutputStream("C:/test.txt")); 
} 

public void pipe(InputStream in, OutputStream out) { 
    byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; 
    int writtenBytes; 
    while((writtenBytes = in.read(buf)) >= 0) { 
     out.write(buf, 0, writtenBytes); 
    } 
} 
+0

Salut Andreas_D J'ai essayé ceci: - Runtime.getRuntime() .exec ("java HelloWorld", null, nouveau fichier ("C: /")); Mais ne pouvait toujours pas obtenir la sortie dans le fichier out.txt. Je ne savais pas comment utiliser getInputStream et getOutputStreams. pouvez-vous s'il vous plaît dites-moi comment obtenir la sortie dans le fichier out.txt? – ivorykoder

+0

J'ai mis à jour la réponse. –

0

Vous n'exécutez pas de ".java" en Java. Vous exécutez un fichier de classe. Donc, changer la deuxième ligne à:

Runtime.getRuntime().exec("cd c:\;java HelloWorld > C:/out.txt"); 

En ce qui concerne la sortie, au lieu de rediriger vers un fichier, vous pouvez utiliser le fluxEntrée:

InputStream is = Runtime.getRuntime().exec("cd c:\;java HelloWorld").getInputStream(); 
3

3 points.

  1. JavaCompiler a été introduit dans Java 1.6 pour permettre la compilation directe de la source Java à partir du code Java.
  2. ProcessBuilder (1.5+) est un moyen plus facile/plus robuste de lancer un processus.
  3. Pour traiter tout processus, assurez-vous de lire et de mettre en œuvre tous les points de When Runtime.exec() won't.
Questions connexes