à l'aide d'Exécution.exec() en Java
Ce que vous avez à faire en Java pour obtenir l'Exécution.exec() pour exécuter un programme qui est sur le chemin? Je suis en train de lancer gpsbabel que j'ai mis dans le chemin (/usr/local/bin).
public class GpxLib {
public static void main(String[] args) {
try
{
Runtime r = Runtime.getRuntime();
Process p = r.exec("gpsbabel -i garmin -f usb: -o gpx -F -");
InputStream is = p.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while (true)
{
String s = br.readLine();
if (s == null)
break;
System.out.println(s);
}
br.readLine();
} catch (IOException e) {
e.printStackTrace(System.err);
}
}
}
Quelle est l'erreur et/ou du comportement voyez-vous ?
OriginalL'auteur Jason S | 2009-08-23
Vous devez vous connecter pour publier un commentaire.
Il héritera le chemin à partir du processus Java. Donc, quel que soit l'environnement du processus Java a, donné naissance processus de ont ainsi. Voici comment vérifier l'environnement:
Avez-vous mis la
PATH
et exporté ? Si vous n'avez pas l'exporter, puis il n'est pas disponible pour les sous-processus.En outre, vous doit consommer stdout et stderr simultanément, pour éviter le blocage. Sinon les choses vont fonctionner dans certains cas, votre engendré processus de sortie différente de la quantité de données et tout s'arrêterait.
Voir cette réponse pour plus de détails.
Le chemin va être défini par l'utilisateur. Vous pouvez ajouter l'entrée du chemin pour que l'exécutable dans votre .bashrc (et peut-être vous connecter à nouveau si vous êtes le lancement d'Eclipse à partir de la barre d'outils ou similaires)
Je pense que le réel la solution est de spécifier le chemin complet vers le binaire, cependant, de sorte que votre programme n'est pas dépendante de l'environnement, et ensuite faire un élément de configuration. C'est habituellement mon stratégiques approche.
d'accord, je suppose que le mieux est d'utiliser un .fichier de propriétés.... Je déteste avoir à exécuter des programmes java comme "java -Dsome.laid.variable=/usr/local/bin/gpsbabel -jar myjar.jar"
...et je veux juste mettre gpsbabel quelque part appropriée de sorte que je peux y accéder sur le chemin. J'ai posé une question quelque part (bon sang, ne peut pas trouver la question à laquelle, je pensais que c'était sur super-utilisateur ou serverfault) et /usr/local/bin est l'endroit recommandé.
OriginalL'auteur Brian Agnew
J'ai ajouté un appel à
System.out.println(System.getenv("PATH"));
qui imprime uniquement horspour une raison /usr/local/bin n'apparaît pas. Il semble que ce soit un MacOSX question ou une Éclipse question, pas une Java question. edit: demandé cette question sur les super-utilisateur à la place.
OriginalL'auteur Jason S
Quoi que vous fassiez, vous devez lire cette. Nul ne doit utiliser
Runtime.exec()
sans l'avoir lue.OriginalL'auteur duffymo
Voici la solution:
est le chemin d'accès où le programme\application excutable est situé à l'e.g "C:\MyProg\"
OriginalL'auteur DareDevil