Bonjour à tous,
Je développe une interface Swing qui permet de se connecter en Telnet sur un serveur AIX distant et d'exécuter des commandes
La connexion Telnet fonctionne impec avec (org.apache.commons.net.telnet.TelnetClient) et lors des tests je récupère bien sur la console le telnet.getInputStream(), ce qui me permet de voir les commandes passées et le détail de l'exécution
Mon souci est que je voudrais que l'affichage se fasse dans une JTextArea, et ca marche ... à moitié seulement ...
Pour cela, avec les infos trouvées sur ce forum, j'exécute le lancement de la connexion Telnet dans un Thread séparé, et pour la mise à jour de ma JTextArea, j'utilise une méthode Runnable, qui fait un "append" avec le texte passé en paramétre :
Classe Action dans mon Thread graphique :
Extrait classe outils Telnet :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 public void actionPerformed(ActionEvent arg0) { final String environnement = fenetre.getListe_env_was().getSelectedItem().toString(); final MajTextArea maj = new MajTextArea(fenetre.getZoneDeTexte()); Thread t = new Thread() { public void run(){ TelnetWrapper telnet = new TelnetWrapper(); telnet.setMajTextArea(maj); telnet.setPrompt("$"); telnet.setPromptLogin("Connexion :"); telnet.setPromptPwd("Mot de passe de "+Constantes.telnet_login+" :"); telnet.Connexion(Constantes.ip_dmgr,new Integer(Constantes.telnet_port).intValue(),Constantes.telnet_login,Constantes.telnet_pwd); //String cmd = "".replaceAll("regxx", nomEnvironnement); //telnet.sendCommand(cmd); telnet.disconnect(); } }; t.start(); }
Sur la sortie "System.out", c'est Ok mais à un moment les append sur ma JtextArea s'arrêtent, si je fait du Debug, sa semble s'arrpeter lorsque les caractères sont une suite de "\r" et "\n"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 public String readUntil(String pattern) { try { char lastChar = pattern.charAt( pattern.length() - 1 ); StringBuffer sb = new StringBuffer(); boolean found = false; //in = telnet.getInputStream(); char ch = (char)in.read(); while(true) { //OK sur la sortie standard System.out.print(ch); //KO en utilisant SwingUtilities majTextArea.setText(Character.toString(ch)); SwingUtilities.invokeAndWait(majTextArea); sb.append(ch); if(ch == lastChar) { if(sb.toString().endsWith(pattern)) { return sb.toString(); } } ch = (char)in.read(); } } catch(Exception e) { e.printStackTrace(); } return null; }
Après avoir lu sur ce forum que la méthode append de JTextArea était "ThreadSafe", j'ai remplacé :
par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 majTextArea.setText(Character.toString(ch)); SwingUtilities.invokeAndWait(majTextArea);
Même résultat ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part textArea.append(Character.toString(ch));
Avez vous une solution à mon pb ?
D'avance merci
Cordialement
Partager