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 :

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();
 
	}
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
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;
	}
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"

Après avoir lu sur ce forum que la méthode append de JTextArea était "ThreadSafe", j'ai remplacé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
majTextArea.setText(Character.toString(ch));
	  SwingUtilities.invokeAndWait(majTextArea);
par :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
textArea.append(Character.toString(ch));
Même résultat ...

Avez vous une solution à mon pb ?

D'avance merci

Cordialement