Java + fichier + graphique

Résolu
cs_ghofrane Messages postés 44 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 11 août 2009 - 12 mars 2007 à 18:36
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 15 mars 2007 à 18:58
bonjour
je suis débutante en java.
mon travail consiste à réaliser une interface graphique qui en cliquant
sur un bouton permet de génerer un test de ping successif
afin de savoir pour un pb de connexion, il se situe au
niveau du client, le serveur ou l'un des 2 routeurs.
 mes pbs sont :


1)  je ne sais pas comment rediriger la
sortie system.out.println vers un textbox ou listbox.


2) je ne sais pas comment afficher le fichier dans un textbox ou listbox


3)je ne sais pas comment rediriger le résultat de cette commande
en un fichier :
Process p = Runtime.getRuntime().exec("ping -n 2 " + ip) ;


4) je ne sais pas équivalent en java de


while(!EOF(f.txt))
c'est a dire le parcours de tt le fichier sachant qu'à intérieur de la boucle
je lis le fichier ligne par ligne.
comme ça:


FileInputStream fis = new FileInputStream("client_ip.txt");
      DataInputStream dis = new DataInputStream(fis);
    String ip = dis.readLine();




merci de votre aide.
nb: débutante en java.

9 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
15 mars 2007 à 14:03
Salut,

je pense que oui il serait bien d'avoir ce genre de source à condition que la commande ping soit traduite pour tous les os (linux, mac  et winodows).

"tu crois que ça serait intéressant si je pose ce code ds le site ou je
dois me taire et rester calme jusqu'à ce que je devienne grande   ? "

Faut bien ce lancer dans la vie sinon tu ne seras jamais grande

Concèrnant ton code je viens de le revoir (j'ai changé des bouts) et de commenter les points obscure donc bonne lecture :

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Diagnostic {
   
    public Diagnostic(){
        new FenetrePrincipale("Diagnostic").setVisible(true);
    }
    // fonction main principale :
    public static void main(String[] args) {
        new Diagnostic();
    }

    // la classe principale qui n'a pas besoin d'être en static
    private class FenetrePrincipale extends JFrame implements ActionListener{
        private static final long    serialVersionUID    = 7721964634241353201L;
        private JButton btExit  = null;
        private JButton btPing    = null;
        //n'utilise jamais de l'awt avec du swing et inversement
        //sinon tu risque de gros problèmes d'affichage
        //pour ton cas utilise plutot un textArea qui est multilignes
        private JTextArea textArea = null;
       
        //constructeur
        private FenetrePrincipale(String s) {
            super(s);
            //en swing utilise simplement la méthode
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            //layout + Panel
            //évite de travailler dirrectement sur la méthode getContentPane c'est assez lourd
            //enfin c'est les appels de méthode qui sont assez gourmand en ressources
            JPanel contentPane = (JPanel)getContentPane();
            contentPane.setLayout(
                    new FlowLayout(FlowLayout.CENTER, 50, 20));
            //les labels
            //merci de mettre les noms de variables en minuscule
            //limite choisi dirrectement des noms explicite
            //et pour un label pas besoin de creer de variable surtout si il est non modifié
            contentPane.add(new JLabel("Voulez-vous :"));
            contentPane.add(new JLabel(" testez la connexion ?"));
            contentPane.add(new JLabel(" Quitter"));

            // les boutons

            btPing = new JButton("test connexion");
            //je sort expres la gestion de l'event
            btPing.addActionListener(this);
            contentPane.add(btPing);
            btExit = new JButton("quitter");
            //je sort expres la gestion de l'event
            btExit.addActionListener(this);
            contentPane.add(btExit);

            //  TextField
            textArea = new JTextArea();
            //change la taille
            textArea.setPreferredSize(new Dimension(400, 300));
            //initialise le champs texte
            textArea.setLineWrap(true);
            //place le champs dans scroll pour tout voir
            contentPane.add(new JScrollPane(textArea));

            // les caractéristiques globales de la fenêtre

            //perso je perefere les fenetre centrée à l'écran
            //setBounds(500, 500, 500, 500);
            setSize(500, 500);
            //centre à l'écran
            setLocationRelativeTo(null);
            setResizable(false);

        }
       
        public void actionPerformed(ActionEvent e) {
            //récupération de la source
            Object o = e.getSource();
            if(o.equals(btExit)){//clic sur quitter
                System.exit(0);
            }else if(o.equals(btPing)){//clic sur ping
                new Ping(textArea).start();
            }
           
        }

    }
   
    private class Ping extends Thread{
        //cette variable permet simplement de recepteur pour le résultat
        private JTextArea result = null;
       
        //constructeur avec la référence sur le champ texte
        public Ping(JTextArea result){
            this.result = result;
        }
       
        public void run(){
            File f = new File("serveur_ip.txt");
            if(!f.exists()){//pour éviter des problèmes
                synchronized (result) {//on synschronise le champs text pour eviter les acces concurents
                    //ici utilise du html pour la portabilité des accents ou des codes unicode
                    //si tu veux la liste : http://fr.wikipedia.org/wiki/Table_des_caract%C3%A8res_Unicode_(0000-0FFF)
                    result.append("Fichier non trouv\u00E9\n");
                }
                return;//on sort
            }
            try{
                //passe par BufferedReader pour lire un fichier avec la méthode readLine
                BufferedReader reader = new BufferedReader(new FileReader(f));
                String ip = reader.readLine();//edmettont que l'adresse soit sur la premiere ligne mais protège toi quand meme
                reader.close();//relache les ressources sur le fichier
                //test sur l'os pour adapter la commande
                //je suis sous linux est la commande pour le nombre de fois c'est -c et non -n)
                String cmd = "";
                if(System.getProperty("os.name").toLowerCase().startsWith("win"))
                    cmd = "ping -n 2 " + ip;
                else
                    cmd = "ping -c 2 " + ip;
                //tester le ping
                //tu devrais faire une barre de progression le temps que la commandese fasse
                Process p = Runtime.getRuntime()
                        .exec(cmd);
                int ret = p.waitFor();                String status ((ret 0) ? "alive" : "dead");
                System.out.println(ip + " is " + status);
               
               
                synchronized (result) {//on synschronise le champs text pour eviter les acces concurents
                    //change le texte
                    result.append(ip + " is " + status + '\n');
                }
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }
}

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
3
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
12 mars 2007 à 20:19
Salut,

1)
pour un flush complet du texte textbox.setText("la chaine que tu met dans le System.out.println");
pour un flush en mode append du texte textbox.setText(textbox.getText() + "la chaine que tu met dans le System.out.println");

2)
exemple avec le jdk 1.5 ou sup
JTextField txt = new JTextField();
try{
    Scanner sc = new Scanner(new FileInputStream("mon fichier"));
    String str = "";
    while(sc.hasNext())
        str += sc.nextLine();
    sc.close();
    txt.setText(str);
}catch(Exception e){
    e.printStackTrace();
}

3)
toujours jdk 1.5
Process p = Runtime.getRuntime().exec("ping -n 2 " + ip) ;
Scanner sc = new Scanner(p.getInputStream());
String str = "";

    while(sc.hasNext())

        str += sc.nextLine();

    sc.close();

    System.out.println(str);

}catch(Exception e){

    e.printStackTrace();

}

4)
String ip = dis.readLine();
if(ip == null) //EOF

PS: utilise le jdk 1.6 tu as le ping dedans (sinon une solution jni reste le mieux vu que l'appel à la commande ping en process externe n'est pas la plus sécure

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
cs_ghofrane Messages postés 44 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 11 août 2009
13 mars 2007 à 22:42
bonsoir
mon pb n'est pas encore résolu:
1)
je veux effectuer affichage  ds textfield après avoir lancé le ping .
mais lors de l'affichage je trouve qu'il ne tient pa compte de ce changement.
et le code est :
nb : por l'exécuter vous devez avoir un fichier serveur_ip.txt
qui contient 127.0.0.1




import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.DataInputStream;
import java.io.FileInputStream;


public class Diagnostic {


 /**
  * @param args
  */
 //déclaration des variables statiques :
 
 static FenetrePrincipale maFenêtre;
 
 // fonction main principale :
 public static void main( String[] args ) {
 maFenêtre = new FenetrePrincipale("Diagnostic");
 }
 
 
 // la classe principale
 static class FenetrePrincipale extends JFrame {
  
  public String etat="dead";
  public String ip="127.0.0.1";
  //constructeur
  FenetrePrincipale(String s) {
  super(s);
  addWindowListener(new WindowAdapter() {
  public void windowClosing(WindowEvent e) {
  System.exit(0);
  }});




  
  //layout + Panel
  getContentPane().setLayout(new
    FlowLayout(FlowLayout.CENTER, 50, 20));
  Panel tfPanel = new Panel(new FlowLayout(FlowLayout.LEFT));
  
  //les labels
  
  JLabel L1 = new JLabel("Voulez-vous :");
  getContentPane().add(L1);
  JLabel L2 = new JLabel(" testez la connexion ?");
  getContentPane().add(L2);
  JLabel L3 = new JLabel(" Quitter");
  getContentPane().add(L3);
  
  // les boutons
  
  JButton B1 = new JButton("test connexion");
  getContentPane().add(B1);
  JButton B2 = new JButton("quitter");
  getContentPane().add(B2);
  
  //  TextField
  
  //getContentPane().add(textField);
  TextField textField = new TextField(15);
  getContentPane().add(textField);
  
  // les actions sur le bouton2: Quitter
  
  B2.addActionListener(new ActionListener()
    {public void actionPerformed(ActionEvent e) {
     System.exit(0);
    }
    });
  
  
  // les actions sur le bouton1 : tester la connexion
  
  
  B1.addActionListener(new ActionListener() {
   
   public void actionPerformed(ActionEvent e) {
    //String ip = "127.0.0.1";
    
    
    try
    {  //JtextBox textbox;
     
     FileInputStream fis = new FileInputStream("serveur_ip.txt");
        DataInputStream dis = new DataInputStream(fis);
      ip = dis.readLine();
      System.out.println("le fichier contient : " + ip);
     //afficher le contenu du fichier
     
     
     
     
     
     
     
      //tester le ping
    Process p = Runtime.getRuntime().exec("ping -n 2 " + ip) ;
    int status = p.waitFor();
    System.out.println(ip + " is "+ (status==0 ? "alive" : "dead") );
    
    if (status==0)
     etat="alive";
     else
      etat="dead";
    }
    catch( Exception e1 ){}
   // je veux qu'il m'affiche le résultat dans un textbox 
    //ici il ne tient pas compte toujours de la modification
    //des valeurs de etat et ip
   }});
  
  //
  // je ne peux pas déclarer le résultat dans le try
  //alors je le fait ici
  // pas accepté textField.getText(ip + "is" + etat);
    textField.setText(textField.getText()+ ip + "is "+ etat);
  
  
  
  // les caractéristiques globales de la fenêtre
  
  setBounds(500,500,500,500);
  setVisible(true);
  setResizable(false);
  
  }
  
  }
  }


 


 




2) je veux parcourir le fichier routeurs_ip tout en effectuant
le ping alors ou je vais mettre l'instruction que vous m'avez donnez
et voilà le code que j'ai écrit:
je veux que je mets ds le fichier routeurs_ip
2 adresses ip pour chaque routeur interface in et interface out.
donc j'ai mis la commande que vous m'avez donnez mais il ne lit qu'une
seule entree du fichier sachant que j'ai mis 4 @ip dont la dernière n'est
pas 127.0.0.1
 //la vérification du coté du routeur
   if(etat=="alive")
   {
    try {
    String fin="faux"; 
    String trouve="faux";
    
     //lecture de l'@ ip à partir du fichier
     FileInputStream fis = new FileInputStream("routeurs_ip.txt");
       DataInputStream dis = new DataInputStream(fis);
       while(( dis.readLine()!=" ")&(trouve=="faux")&(fin=="faux")) 
     {  
     String ip = dis.readLine();
     if(ip == null)
      fin="vrai";
    
     System.out.println("le fichier contient : " + ip);
    
     // exécution de la commande ping avec [mailto:l'@ip l'@ip]
    Process p = Runtime.getRuntime().exec("ping -n 2 " + ip) ;
    int status = p.waitFor();
      if (status == 0)
            etat= "alive";
      else
           etat = "dead";
              trouve="vrai";
    
    // sortie du résultat
    System.out.println(ip + "routeur"+ "is "+ (status==0 ? "alive" : "dead") );
    }
    }
  catch( Exception e ){}
  //catch(IOException ioEx)
  //{}
 }


  




3)je travaille avec l'eclipse 3.1 alors il m'affiche qu'il ne connait pas le mot
 Scanner


merci de votre patience et votre aide.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
13 mars 2007 à 23:00
Salut,

la classe Scanner n'est utilisé que depuis le jdk 1.5... peux-tu etre plus explicite stp.

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ghofrane Messages postés 44 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 11 août 2009
14 mars 2007 à 12:38
salut
j'ai pas bien compris ton msg
explicite çad quoi?
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
14 mars 2007 à 13:53
Salut,

sur tout ce que tu veux faire parce que honnetement se plonger dans le code comme ça c'est assez lourd, en explicant le but des fichier et leurs contenu

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
cs_ghofrane Messages postés 44 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 11 août 2009
14 mars 2007 à 20:22
salut
je veux tout simplement savoir comment on peut ajouter le contenu d'un fichier à une liste.
et aussi comment ajouter le contenu d'un system.println à une liste(sachant que le contenu contient des chaines constantes + des variables à afficher).
Nb: je travaille avec eclipse(java runtime ) donc je n'ai pas pu exploiter le contenu de certaines codes que tu m'as fourni précédemment.
et merci beaucoup twinuts.
remarque :
j'ai effectuer un ptt programme qui test le ping entre un client, un serveur et un nombre illimité de routeurs.
alors est ce que tu crois que ça serait intéressant si je pose ce code ds le site ou je dois me taire et rester calme jusqu'à ce que je devienne grande   ? 
0
cs_ghofrane Messages postés 44 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 11 août 2009
15 mars 2007 à 18:31
salut
j'ai voulu quand même te dire merci .
je vais relire le code.
mais juste le fait de se prolonger dans ce code m'a touché beaucoup.
merci t'es le meilleur.
et si tu trouves un jour des pbs en java tu peux tjs me contacter
merci encore.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
15 mars 2007 à 18:58
Salut,

"j'ai voulu quand même te dire merci ."
Bah de rien

"merci t'es le meilleur."
Nan il y en a des meilleurs

"et si tu trouves un jour des pbs en java tu peux tjs me contacter"
Je suis assez rarement bloqué sur un prob et quand je le suis je trouve mes réponses assez vite grâce à mon pote google

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
Rejoignez-nous