2012-10-06 2 views
0

Donc, voici mon code:Eclipse donne différentes sorties que cmd en utilisant l'exécution exec

System.out.print("hellow"); 
    try { 
     int x; 
     Runtime rt = Runtime.getRuntime(); 
     Process proc = rt.exec("java CPU/memory"); 
     BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream())); 
     String line = null; 
     while((line = in.readLine())!=null) { 
      System.out.println(line); 
     } 
     proc.waitFor(); 
    } catch (Throwable t) 
    { 
     t.printStackTrace(); 
    } 
$ 

Quand je lance java CPU/CPU cmd Je reçois "hellowhello" avec une valeur de sortie de 0

Mais quand je l'exécute en éclipse je viens d'obtenir "bonjour" avec la valeur de sortie de 1

Une idée?

+1

vous exécutez rt.exec ("CPU java/mémoire"); dans votre code, vérifiez-le! – Juvanis

+0

N'ignorez pas le ErrorStream. Si vous le lisez (dans son propre fil), vous verrez ce que vous faites mal. –

Répondre

2

Vous avez un environnement différent du système dans l'exécution de la chaîne de commande et l'exécution d'Eclipse.

Les variables d'environnement sont précieuses: PATH, JAVA_HOME ou JRE_HOME et votre répertoire de travail actuel.

J'utilise ProcessBuilder dans les cas, quand je dois être sûr dans l'environnement, qui est fourni pour un processus externe comme le votre "CPU/mémoire java".

Je pense que tout d'abord votre processus externe ont un mauvais répertoire de travail. En ProcessBuilder vous pouvez insister là-dessus avec:

ProcessBuilder pb = new ProcessBuilder("java", "CPU/MEMORY"); 
pb.directory(new File("/home/myhome/myjavaprojects")); 
Process p = pb.start(); 
+0

Oui, c'est ce que je faisais mal, merci! –

0

N'ignorez pas le ErrorStream. Si vous le lisez (dans son propre fil), vous verrez ce que vous faites mal.

Par exemple:

import java.io.*; 

public class Foo001 { 
    public static void main(String[] args) { 
     System.out.println("hellow"); 
     try { 
     int x; 
     Runtime rt = Runtime.getRuntime(); 
     Process proc = rt.exec("java CPU/memory"); 
     final BufferedReader in = new BufferedReader(new InputStreamReader(
       proc.getInputStream())); 
     final BufferedReader err = new BufferedReader(new InputStreamReader(
       proc.getErrorStream())); 
     new Thread(new ReadLiner(in, "in")).start(); 
     new Thread(new ReadLiner(err, "err")).start(); 
     // proc.waitFor(); // not sure that this is needed 
     } catch (Throwable t) { 
     t.printStackTrace(); 
     } 
    } 
} 

class ReadLiner implements Runnable { 
    private BufferedReader br; 
    private String text; 

    public ReadLiner(BufferedReader br, String text) { 
     this.br = br; 
     this.text = text; 
    } 

    @Override 
    public void run() { 
     String line = null; 
     try { 
     while ((line = br.readLine()) != null) { 
      System.out.println(text + ": " + line); 
     } 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } 
    } 

} 
Questions connexes