[java][applet][débutant]Affichage

Fermé
TexTwil Messages postés 298 Date d'inscription jeudi 25 octobre 2001 Statut Membre Dernière intervention 8 juin 2009 - 26 oct. 2004 à 14:59
 dalby - 16 déc. 2004 à 08:13
Bonjour,
j'ai fait l'applet suivant (code ci dessous) qui est censé immiter une commande "ping". En gros, il ouvre un socket puis le referme vers un site 10x à la suite (boucle for).

La méthode pingIt se lance quand on appuye sur le bouton "PingIt". Le TextArea situé sous le bouton affiche les résulatats (provenant de la méthode Debug).

Ma question est la suivante : La classe telle qu'elle est ci dessous affiche les résultats une fois que la boucle for est terminée et j'aimerais savoir comment faire pour afficher chaque ligne en temps réel dans le TextArea.

Merci pour votre aide.


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

import java.io.IOException;
import java.net.Socket;



public class MainPing extends JPanel implements ActionListener
{
	
	private JTextArea affichage;
	private JButton bouton;
	private JPanel pannel;
	private JFrame fenetre;


	MainPing()
	{
		//super.setLayout(new GridLayout(3,1));
		bouton = new JButton("Ping It");
		affichage = new JTextArea("",10,30);
		
		
		bouton.addActionListener(this);
		
		add(bouton);
		add(affichage);


	}
	
    public void actionPerformed(ActionEvent e) 
    {
    	pingIt();
    }
    

	public void pingIt()
	{
		long start =0, stop = 0;		
		Socket socket = null;
		
		for(int i=0; i<10; i++)
		{
			try 
			{
				start = System.currentTimeMillis();
				socket = new Socket("www.free.fr", 80);
				stop = System.currentTimeMillis();
												
				Debug("Socket opened in "+(stop-start)+" ms.    ");
			}
			catch (Exception e)
			{
				Debug("Site is not there.\n");
			}
			finally 
			{
				try
				{
					if (socket != null)
					socket.close();
					Debug(" Closing socket ...\n");
					Thread.sleep(2000);
				} 
				catch (IOException e) {	}
				catch (InterruptedException e) { }
				
			}
			
		}
	}
	
	public void Debug(String message)
	{
		affichage.append(message);
	}
    
    private static void createAndShowGUI() 
    {
        //Make sure we have nice window decorations.
        JFrame.setDefaultLookAndFeelDecorated(true);
        

        //Create and set up the window.
        JFrame fenetre = new JFrame("JPing");
        fenetre.setSize(400,500);
        //fenetre.pack();
        fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        MainPing newContentPane = new MainPing();

        newContentPane.setOpaque(true); //content panes must be opaque
        fenetre.setContentPane(newContentPane);

        //Display the window.
        
        fenetre.show();
        fenetre.setVisible(true);
    }    
    
    
    
    public static void main(String[] args) 
    {
		createAndShowGUI(); 
    }	
	
}    



Tex
A voir également:

2 réponses

choubaka Messages postés 39407 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 9 décembre 2024 2 104
26 oct. 2004 à 17:56
Salut

le problème n'est pas si complexe, mis à part de grossières erreurs au niveau de la structure de ton programme...

Tu dois dissocier la vue du moteur de ton application et éviter de créer la vue dans la méthode Main...

en gros ...

Créer une classe ("Pinger") possédant une méthode statique (pingIt) prenant en argument l'adresse URL à pinger et renvoyant un String renvoyant le résultat du ping, qu'il soit correct ou pas, à toi de renvoyer un "code d'erreur" en String pour analyser.

Créer ton JFrame avec ton bouton et ton textArea, tout ce qui est relatif à la vue... (exemple MaJFramePourPinguer)

Dans ton code gérant l'event du bouton, tu fais appel à la méthode statique de la classe pinger (qui ne doit pas forcément être instanciée) dans une boucle. Du fait que cette méthode renvoie un String (qu'il soit le résultat du ping ou un de tes codes d'erreur, tu peux à ce moment là effectuer l'affichage de tes lignes de résultats une par une.

Ce qui peut donner dans la gestion de l'event..


for(int i=0; i<10; i++){

   String s = Pinger.pingIt()

            if ( s = "erreur'){   // ton code erreur ou tes codes selon le cas, tu affiches et gères ton erreur

             monTextArea.setText("s");

              }

           else  monTextArea.setText(s);


                 


           


voilà




Chouba,
Pochard d'assaut .. 
0
je penses qu'ecrit comme ça, chaque ligne s'ecrit au-dessu de la précendente, comment fair pour qu'elle s'affiche a la ligne!?

merci d avance
0
bonjour,
je n'ai pas le meme prog que toi, mais le meme problème d'affichage : chaque donnee s'inscrit à la place de la précédente
j'ai beau chercher partout, je n'arrive pas à faire en sorte qu'elles s'inscrivent l'une en dessous de l'autre
si jamais tu finis par trouver la solution, n'oublies pas de la poster!!
bonne journée
0