2010-08-31 22 views
1
void restartWeb() { 
     try { 
      String[] command = new String[] {"webRestarter.exe" , ">>","webLog.log"}; 
      Runtime.getRuntime().exec(command); 
     } catch (java.io.IOException err) { 
     webServer.logError(err.getMessage()); 
     } 
    } 

Pourquoi cela ne fonctionne-t-il pas? Comment pourrais-je le réparer pour qu'il fonctionne comme je le veux?Ajout de paramètres à Runtime.getRuntime()?

- webRestarter.exe avec des paramètres Exécute >> webLog.log

Il avait craché quelque chose comme ceci:

webRestarter.exe>>webLog.log 

Répondre

5

Vous ne pouvez pas utiliser les tubes dans un appel exec. Les tuyaux sont une fonctionnalité de la coque et non du système d'exploitation. Nous devons donc appeler le shell exécutable et passer la commande. Essayez ceci à la place:

String[] command = new String[] {"cmd.exe", "/c", "start webRestarter.exe", ">>","webLog.log"}; 
+0

Merci beaucoup! Cela marche:) – Kyle

1

Les paramètres sont passés directement à la commande webRestarter.exe. Vous ne pouvez pas utiliser les paramètres pour rediriger la sortie standard vers un fichier, car cela est généralement effectué par votre interpréteur de ligne de commande.

Toutefois, la méthode exec() renvoie un objet Process que vous pouvez utiliser pour extraire la sortie standard et l'écrire dans un fichier.

Sources:

http://download.oracle.com/javase/6/docs/api/java/lang/Runtime.html#exec%28java.lang.String%29

http://download.oracle.com/javase/6/docs/api/java/lang/Process.html

1

Si je ne me trompe pas, tuyaux, etc sont les redirections fonction d'une coquille. Dans ce contexte, ce ne sont que des arguments. Vous pouvez gérer cela simplement en utilisant cmd.exe avec un commutateur/c dans le cadre de votre commande, je crois que ça va gérer cela correctement, ou gérer vous-même l'entrée/sortie standard (bien que cela soit notoirement chargé de problèmes, je préfère quelque chose comme commons-exec).

0

Juste pensé que je mentionnerais deux choses qui pourraient être utiles pour travailler avec des processus.

  1. ProcessBuilder est un bon moyen d'obtenir un processus (en code destiné à exécuter dans un environnement JRE 1.5+).

  2. Il est recommandé de lire attentivement et mettre en œuvre tous les les recommandations de When Runtime.exec() won't.