2010-04-09 5 views
2

J'ai une classe avec le code suivant:
Java Runtime ligne de commande Process

Process process = null; 
try { 
    process = Runtime.getRuntime().exec("gs -version"); 
    System.out.println(process.toString()); 
} catch (Exception e1) { 
    e1.printStackTrace(); 
} finally { 
    process.destroy(); 
} 

je peux courir "gs -version" sur ma ligne de commande et d'obtenir: GPL Ghostscript 8.71 (2010-02-10 Copyright (C) 2010 Artifex Software, Inc. Tous droits réservés. Donc, je sais que j'ai le chemin au moins défini quelque part. Je peux exécuter cette classe à partir de la ligne de commande et cela fonctionne. Mais quand je le lance en utilisant Eclipse je reçois l'erreur suivante:

java.io.IOException: Cannot run program "gs": error=2, No such file or directory 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:459) 
    at java.lang.Runtime.exec(Runtime.java:593) 
    at java.lang.Runtime.exec(Runtime.java:431) 
    at java.lang.Runtime.exec(Runtime.java:328) 
    at clris.batchdownloader.TestJDBC.main(TestJDBC.java:17) 
Caused by: java.io.IOException: error=2, No such file or directory 
    at java.lang.UNIXProcess.forkAndExec(Native Method) 
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:53) 
    at java.lang.ProcessImpl.start(ProcessImpl.java:91) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:452) 
    ... 4 more 

Dans mon programme, je peux remplacer « gs » avec: « java », « mvn », « svn » et il fonctionne. Mais "gs" ne le fait pas. C'est seulement en éclipse que j'ai ce problème.

Des idées, sur ce que je dois faire pour résoudre ce problème?

Répondre

3

Je pense que vous devez définir PATH en tant que variable d'environnement dans votre configuration Eclipse Run.

+0

J'ai donc essayé d'ajouter le chemin de "gs" dans mes "Configurations d'exécution" -> Onglet Environnement et "Ressources liées" (Préférences -> Général -> Espace de travail -> Ressources liées). Vous n'avez aucune idée ... – AEIOU

+0

Avez-vous une idée de la raison pour laquelle l'éclipse peut acquérir le chemin du système et dans quels cas le chemin de l'environnement Eclipse doit-il être défini? –

-1

Vous pouvez qualifier complètement l'emplacement de gs - qui est probablement la meilleure façon puisque vous ne devriez pas approuvez le chemin du système ...

+0

C'est pourquoi les gens écrivent un logiciel qui n'est pas portable sur un autre système. – sorin

3

(Voir http://www.devdaily.com/java/java-exec-processbuilder-process-2 pour l'article à partir de laquelle cet extrait a été prise, vous aurez besoin les autres classes là pour le faire fonctionner.)

donner à cette de tir pour

List<String> commands = new ArrayList<String>(); 
    commands.add("/bin/sh"); 
    commands.add("-c"); 
    commands.add("gs -version"); 
    try 
    { 
     ProcessBuilder pb = new ProcessBuilder(commands); 
     Process process = pb.start(); 

     inputStreamHandler = new ThreadedStreamHandler(
       process.getInputStream()); 
     errorStreamHandler = new ThreadedStreamHandler(
       process.getErrorStream()); 

     inputStreamHandler.start(); 
     errorStreamHandler.start(); 

     process.waitFor(); 

     inputStreamHandler.interrupt(); 
     errorStreamHandler.interrupt(); 

     inputStreamHandler.join(); 
     errorStreamHandler.join(); 
    } 
    catch (IOException e) 
    { 
     Log.err(e); 
    } 
    catch (InterruptedException e) 
    { 
     Log.err(e); 
    } 
    StringBuilder stdout = inputStreamHandler.getOutputBuffer(); 

2

dans Eclipse Exécuter les configurations pour votre programme, allez dans l'onglet Environnement et ajouter une nouvelle variable d'environnement appelé "PATH" où la valeur est quelque chose comme ceci (sous Windows) "C: \ Program Files (x86) \ gs \ gs9.02 \ bin;% PATH%".

Cela devrait fonctionner. Soit cela ou dans votre programme Java, au lieu de faire un Runtime.exec ("gs ..."), faire un Runtime.exec ("mon-batch-fichier.bat" ...) où le mon -batch-fichier.bat contiendra une ligne indiquant le chemin vers l'exécutable Ghostscript:

set PATH = C: \ Program Files (x86) \ gs \ gs9.02 \ bin;% PATH%

1

I eu le même problème et j'ai trouvé le problème. La variable de chemin dans Eclipse avait un contenu différent de celui de la ligne de commande.

Solution:

Regardez pour la variable $ chemin commande en ligne et copier le contenu. Puis ouvrez Run Configuration-> Environment et sélectionnez new. Nom: $ PATH Valeur: insérez le contenu copié.

Cela a résolu le problème.

Questions connexes