Ouvrir une nouvelle fenêtre shell avec un nouveau processus?

Ouvrir une nouvelle fenêtre shell avec un nouveau processus? - Java - Programmation

Marsh Posté le 02-05-2006 à 16:20:37    

Bonjour
 
Dans mon programme java en mode texte j'exécute une commande pour ouvrir une session telnet sur une machine distante. Etrangement aucune nouvelle fenetre ne s'ouvre et pas de traces de mon processus...
 

if (mess.startWith("telnet" ))
{
   try {
      Process p = Runtime.getRuntime().exec("cmd /c telnet "+ip);
   } catch (IOException e) {}
}


 
Comment faire pour que le processus que j'appel se lance dans une nouvelle fenetre shell?
Merci :hello:


Message édité par XK le 02-05-2006 à 16:27:57
Reply

Marsh Posté le 02-05-2006 à 16:20:37   

Reply

Marsh Posté le 02-05-2006 à 17:11:34    

Dans ton cas précis, je te conseille de t'orienter vers un lib toute faite pour les appels telnet.
 
La gestion des process en Java, c'est le Mal.
 
Déjà, si tu évitais d'enterrer l'exception, il se pourrait que tu obtiennes plus d'info.
 
Chuis pas sûr que tu puisses obtenir la fenêtre DOS. Tu t'orientes dans la mauvaise direction à mon avis (appeler le dos prompt pour lancer un client telnet... trop de surcouches dans un contexte trop dégueu).
 
HTH
 
[:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 02-05-2006 à 18:27:17    

Je n'ai rien qui sort en exception c'est ça le plus étrange...
Tout ce qui est avant la commande "Process p = Runtime.getRuntime().exec("cmd /c telnet "+ip);" et après est correctement exécutée, par contre la commande ne donne rien en sortie.
Où est sensé s'afficher la sortie? Même si c'est dans la même fenêtre ce n'est pas grave, ce que j'aimerai c'est pouvoir effectuer normalement mon telnet... :(
Merci pour tes conseils je vais chercher voir les lib telnet si il y a des choses intéressantes...

Reply

Marsh Posté le 02-05-2006 à 18:56:11    

Salut,
Faut lire la doc:
http://java.sun.com/j2se/1.4.2/doc [...] ocess.html
"The Runtime.exec methods may not work well for special processes on certain native platforms, such as native windowing processes, daemon processes, Win16/DOS processes on Microsoft Windows, or shell scripts. The created subprocess does not have its own terminal or console. All its standard io (i.e. stdin, stdout, stderr) operations will be redirected to the parent process through three streams (Process.getOutputStream(), Process.getInputStream(), Process.getErrorStream())."

Reply

Marsh Posté le 04-05-2006 à 05:51:32    

si tu veux inviter la fenetre dos et executer telnet je peux t assurer que le code que t'as taper est juste et que le processus est executé mais sans affichage de la fenetre dos c parceque tu utilise le path javaw.exe (qui permet l'execution des commandes dos sans afficher la fenetre) mais si tu utilise le path java.exe cela sera possible  

Reply

Marsh Posté le 04-05-2006 à 15:43:57    

Ok donc j'ai utilisé le programme JTA qui est en Java et supporte Telnet et SSH :)
 
La commande pour l'exécuter :
Runtime.getRuntime().exec("java -jar jta26.jar "+hostname);
 
Dommage qu'il ne soit pas possible de passer le nom d'utilisateur et le mot de passe en paramètre :(

Reply

Marsh Posté le 04-05-2006 à 16:18:26    

XK a écrit :

Ok donc j'ai utilisé le programme JTA qui est en Java et supporte Telnet et SSH :)
 
La commande pour l'exécuter :
Runtime.getRuntime().exec("java -jar jta26.jar "+hostname);
 
Dommage qu'il ne soit pas possible de passer le nom d'utilisateur et le mot de passe en paramètre :(


 
C'est vraiment n'importe quoi !!!
 
Quand tu veux utiliser un composant java, tu ne demandes pas au système d'exploitation de relancer une JVM, tu utilises les classes du composant directement !

Reply

Marsh Posté le 04-05-2006 à 23:26:40    

XK a écrit :


Runtime.getRuntime().exec("java -jar jta26.jar "+hostname);


 :love:


---------------
You need to get to the bottom of things...
Reply

Marsh Posté le 09-05-2006 à 11:17:40    

Bidem a écrit :

C'est vraiment n'importe quoi !!!
 
Quand tu veux utiliser un composant java, tu ne demandes pas au système d'exploitation de relancer une JVM, tu utilises les classes du composant directement !


Je le sais bien mais je veux que ce soit exécuté bien séparément du code serveur et la gestion des Threads ce n'est pas mon fort :sarcastic:

Reply

Marsh Posté le 22-05-2006 à 22:19:30    

Plusieurs conseils :
 
1) Il se trouve que pour une raison que j'ignore, les processus sont lancés soit depuis une console, soit depuis <pas une console>... or les processus en général ne flushent pas bien leur sortie qd ils ne sont pas lancés depuis une console.  
 
Conséquence : tu peux parfois bloquer sur une attente de sortie d'un processus alors que ce dernier a bien écrit sur la sortie... C'est difficile, car il faut lancer le processus fils avec les options ad-hoc, qui dépendent de ce dernier, pour qu'il flush bien. Exemple : j'arrive à bien récupérer la sortie d'un processus python si je le lance avec les options -i -u. Sinon, nada.
 
2) Je te conseille vivement l'utilisation des classes Telnet de Apache http://jakarta.apache.org/commons/net/
 
3) ...et aussi (pub perso) le projet yactu qui permet de lire facilement un flux de sortie de processus (donc un flux d'entrée pour java) avec des timeout, par exemple, pour éviter d'attendre un temps infini, mais aussi des regexps etc.
 
Laurent Ploix

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed