2010-05-11 7 views
0

J'utilise un processus java pour se reproduire beaucoup d'autres processus de Java en utilisant Runtime.exec(cmd) où cmd est comme ce qui suit:Runtime.exec brut pour appeler java -cp ne fonctionne pas sous Linux

java -cp "MyJar.jar" pkg.MyClass some-more-arguments

exécutant le même commande à partir de la ligne de commande fonctionne très bien dans Windows et Linux, mais quand mon spawning Java appelle la commande via Runtime.exec cela fonctionne dans Windows mais pas dans Linux.

dans linux i get Exception in thread "main" java.lang.NoClassDefFoundError: pkg/MyClass

des idées?

+0

Avez-vous vérifié les variables PATH et cLASSPATH? – Konerak

+0

qu'est-ce que cela signifie que vous? la commande doit définir le chemin via -cp – pstanton

+0

ce sont quelques-plus-arguments? – aioobe

Répondre

2

utilisation Runtime.exec (string []), non Runtime.exec (string)

2

Ce bout de code:

Process p = Runtime.getRuntime().exec("echo \"hello\""); 
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); 
System.out.println(br.readLine()); 

donne cette sortie sous Linux:

"hello" 

avec guillemets (")

Donc, ma suggestion est de supprimer les guillemets (. ") de la ligne exec. Ils ne sont pas supprimés lorsque la commande est exécutée, mais transmis au programme externe en tant qu'arguments. C'est en fait l'équivalent d'écrire java -cp \"MyJar.jar\" ... dans l'invite.

Si vous besoin les « -marks (MyJar.jar a peut-être des espaces ou quelque chose), je vous suggère de regarder Runtime.exec(String command, String[] envp). Cela devrait même le rendre plus indépendant de la plateforme.

+0

Bonne attraper, je ne serais pas surpris si c'est le problème! –

+0

merci, cela semble me faire un pas de plus en ce qu'il est findi ng la classe, mais alors je suis confronté à un autre problème, s'il vous plaît voir modifier pour plus d'infos^ – pstanton

+0

en fait, mon erreur, cela fonctionne. – pstanton

Questions connexes