2010-09-27 19 views
2

Je suis en train d'exécuter un fichier .bat à distance et la mise en œuvre des lignes de code suivantes:ProcessBuilder est bloqué après avoir obtenu une erreur

ProcessBuilder processBuilder = new ProcessBuilder(command); 
    final Process process = processBuilder.start(); 

    InputStream stderr = process.getErrorStream(); 
    InputStreamReader isr = new InputStreamReader(stderr); 
    BufferedReader br = new BufferedReader(isr); 
    String line = null; 


    while ((line = br.readLine()) != null) { 
     System.out.println(line); 

    } 
    process.waitFor(); 
    System.out.println("Waiting ..."); 

    System.out.println("Returned Value :" + process.exitValue()); 

mais mon programme est bloqué à l'intérieur en boucle. L'erreur affichée est:

CMD.EXE was started with the above path as the current directory. 
UNC paths are not supported. Defaulting to Windows directory. 

Il ne sort jamais du tout loop.But il exécute avec succès le script. Toute sorte d'aide est appréciée. Merci

Répondre

3

Vous devez vous assurer que vous avez également affaire à stderr, et vous devriez traiter les deux flux dans des threads séparés.

Lire this et assurez-vous de suivre tous les le conseil.

Éditer: En regardant le code que vous avez écrit, vous semblez avoir reproduit le code de cet article précis. En fait, il ressemble à la liste 4.3 (MediocreExecJavac.java).

+2

En variante, appeler 'processBuilder.redirectErrorStream (true);' pour rediriger le processus erreur type sur la sortie standard. Il suffit ensuite de lire 'process.getInputStream()'. –

2

Ajoutez redirectErrorStream (true) avant de démarrer .start() et lisez getInputStream(). Cela va lire stderr et fusionner cela avec stdout en une réponse qui peut être lue avec getInputStream().

ProcessBuilder processBuilder = new ProcessBuilder(command); 
    processBuilder.redirectErrorStream(true); 
    final Process process = processBuilder.start(); 

    InputStream stderr = process.getInputStream(); 
    InputStreamReader isr = new InputStreamReader(stderr); 
    BufferedReader br = new BufferedReader(isr); 
    String line = null; 


    while ((line = br.readLine()) != null) { 
     System.out.println(line); 

    } 
    process.waitFor(); 
    System.out.println("Waiting ..."); 

    System.out.println("Returned Value :" + process.exitValue());