cs_ghofrane
Messages postés44Date d'inscriptionmardi 18 juillet 2006StatutMembreDernière intervention11 août 2009
-
12 mars 2007 à 18:36
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 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();
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 ..."
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 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 ..."
cs_ghofrane
Messages postés44Date d'inscriptionmardi 18 juillet 2006StatutMembreDernière intervention11 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
// 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);
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";
// 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";
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 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 ..."
cs_ghofrane
Messages postés44Date d'inscriptionmardi 18 juillet 2006StatutMembreDernière intervention11 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 ?
cs_ghofrane
Messages postés44Date d'inscriptionmardi 18 juillet 2006StatutMembreDernière intervention11 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.
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 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 ..."