Salut les gars. Je travaille sur un programme en Java conçu pour être utilisé sur un environnement Linux qui crée un nouveau processus Java qui exécute une autre classe Java, mais j'ai des problèmes avec cela. J'ai finalement réglé tous mes problèmes à ce sujet. L'appel Java Runtime.exec malheurs sur Linux
Runtime.getRuntime().exec(new String[] { "/bin/bash", "-c", "'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'" })
dans mon programme Java retourne
/bin/bash: /usr/lib/jvm/java-6-openjdk/jre/bin/java -classpath /home/kevin/workspace/Misc/bin HelloWorld: No such file or directory
dans les deux stdout/stderr. Si je tente
Runtime.getRuntime().exec(new String[] { "/bin/bash -c 'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'" })
Je reçois une exception Java
Cannot run program "/bin/bash -c 'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'": java.io.IOException: error=2, No such file or directory
...
Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory
Et enfin, en utilisant un simple
Runtime.getRuntime().exec("/bin/bash -c 'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'")
me donne un
-classpath: -c: line 0: unexpected EOF while looking for matching `''
-classpath: -c: line 1: syntax error: unexpected end of file
de stdout/stderr.
Pendant ce temps, la création d'une nouvelle ligne .sh fichier (et l'attribution d'autorisations appropriées) avec seulement cela (no #!/Bin/bash en haut du fichier)
/bin/bash -c 'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'
donne la sortie correcte avec pas d'erreurs Je comprends que l'utilisation de Runtime.exec est assez compliquée à perfectionner, et j'ai déjà résolu de gros problèmes, mais ce problème me dérange (comme l'utilisation de StringTokenizer par Runtime.exec). commandes qui ont des espaces en eux, c'est pourquoi j'ai invoqué la surcharge qui accepte les tableaux de chaînes). Cependant, j'ai toujours des problèmes avec ça et je ne comprends pas pourquoi.
Monsieur, vous êtes le meilleur. Je ne peux pas croire que la réponse était aussi simple! Merci beaucoup, je n'aurais jamais pensé à faire quelque chose comme ça. –