IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Problème "Exception in thread "Timer-0""


Sujet :

Java

  1. #1
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut Problème "Exception in thread "Timer-0""
    Bonjour j'ai une classe qui est la suivante :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    public class Dns {
    	String server=null;
    public Dns(String server)
    	{
    		this.server=server;
     
    	}
     
    	String myLine= null;
    	static tableau tab = new tableau();
    	int s =0; // nombre de requetes non résoluts
    	double perte;
    //methode qui calcule le taux de perte (utilisant la bibliotheque Bind9 d'Unix)
    public double taux (int t) throws IllegalStateException, IOException
    	{
    	InputStreamReader flog	= null;
    	LineNumberReader llog	= null;
     
     
    //Lecture du fichier texte
     
     
    	flog = new InputStreamReader(new FileInputStream("/home/mlahsini/Bureau/Liste.txt" +"") );
    	llog = new LineNumberReader(flog);
    //Lancement d'une instance d'un Shell Unix.
     
    	Shell sh =new Shell();
     
    	while ((myLine = llog.readLine()) != null) { 
     
    //commande retournant le message de traitement de la requete
    		String msg = sh.command("dig @"+server+" "+myLine+"|grep status |awk -F':' '{print $3}' |awk -F ',' '{print $1}'").consumeAsString(); 
    		if (msg == "SERVFAIL")
             {
          	   s=s+1;
             }
    	}
    		 perte = s/(t);
    	return(perte);
     
    //t c'est la taille du tableau(nombre de requetes a traiter)	
     
     
    	}
    public  Vector<Double> tableau() {
    	InputStreamReader flog	= null;
    	LineNumberReader llog	= null;
     
    	 Vector<Double> valeur=new Vector<Double>();
    try{ 
    	flog = new InputStreamReader(new FileInputStream("/home/mlahsini/Bureau/Liste.txt") );
    	llog = new LineNumberReader(flog);
     
     
    	Shell sh =new Shell();
    	int i=0;
    	while ((myLine = llog.readLine()) != null) { 
     
    			String resultat = sh.command("dig @"+server+" "+myLine+"|grep time | awk -F':' '{ print $2}' |awk  '{print $1}'").consumeAsString();
    			double query = Double.parseDouble(resultat);
     
    			valeur.add(query);
     
               }
     
        }catch (Exception e){
               // --- Gestion erreur lecture du fichier (fichier non existant, illisible, etc.)
               System.err.println("Error : "+e.getMessage());
        }	
     
     
        return(valeur);
    }
     
    }
    ca me genere cette erreure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Error : empty String
    Exception in thread "Timer-0" java.lang.ArithmeticException: / by zero
    	at marouene.Dns.taux(Dns.java:45)
    	at marouene.TestPerformance$1RemindTask.run(TestPerformance.java:45)
    	at java.util.TimerThread.mainLoop(Timer.java:534)
    	at java.util.TimerThread.run(Timer.java:484)

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Comme indiqué par l'erreur, tu divises par zéro à un moment.
    A priori, c'est ici :

  3. #3
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    Enfet c'est bizarre,
    mon application tourne périodiquement, la 1ere fois ca marche sans probleme, mais le 2eme test ca m'affiche ce genre d'erreurs

  4. #4
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Vu que tu divises par t, et que t est le paramètre de la méthode, vérifie tes tests pour voir si tu ne passes pas un 0 à l'appel de méthode.

    Sinon, utilise le debugger, ça devrait t'aider.
    Par contre, impossible de dire quoi que ce soit de plus sans le bout de code appelant cette méthode.

  5. #5
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    bon j'ai carrement changé le t ( je l'ai remplacé par une valeur)
    voila le msg d'rreur que j'obtient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Exception in thread "Timer-0" java.lang.NumberFormatException: empty String
    	at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1012)
    	at java.lang.Double.parseDouble(Double.java:527)
    	at marouene.Dns.tableau(Dns.java:91)
    	at marouene.TestPerformance$1RemindTask.run(TestPerformance.java:45)
    	at java.util.TimerThread.mainLoop(Timer.java:534)
    	at java.util.TimerThread.run(Timer.java:484)
    .

    voila ce qu' j'ai changé dans mon code
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
     
     
    public class Dns {
     
    	String server=null;
     
     
    	public Dns(String server)
    	{
    		this.server=server;
     
    	}
    	public static String getRandomElement (Vector v) {
    		Random generator = new Random();
    		int rnd = generator.nextInt(v.size() - 1);
    		return (String)v.get(rnd); // Cast the vector value into a String object
    		}
    	public  Vector<String> site() throws IOException
    	{
     
    		String myLine= null;
    		InputStreamReader flog	= null;
    		LineNumberReader llog	= null;
    		 Vector<String> valeur=new Vector<String>();
    		flog = new InputStreamReader(new FileInputStream("/home/marouene/Bureau/Liste.txt" +"") );
    		llog = new LineNumberReader(flog);
     
    		while ((myLine = llog.readLine()) != null) { 
    			valeur.add(myLine);
     
    		}
     
     
    		return valeur;}
     
    	Random generator = new Random();
     
    	static tableau tab = new tableau();
    	int s =0;
    	double perte;
    	public double taux (Vector V) throws IllegalStateException, IOException
    	{
     
    	Shell sh =new Shell();
    	for(int i=0;i<50;i++)
    	{
     
    		String msg = sh.command("dig @"+server+" +time=3 "+getRandomElement(V)+"|grep status |awk -F':' '{print $3}' |awk -F ',' '{print $1}'").consumeAsString(); 
    		if (msg == "SERVFAIL")
             {
          	   s=s+1;
             }
    	}
    		 perte = ((s/(100))*100);
    	return(perte);
     
     
     
     
    	}
    public  Vector<Double> tableau(Vector V) throws IllegalStateException, IOException {
     
    	 Vector<Double> valeur=new Vector<Double>();
     
    	Shell sh =new Shell();
     
     
     
    	for(int i=0;i<50;i++)
    	{
    			String resultat = sh.command("dig @"+server+" +time=3 "+getRandomElement(V)+"|grep time | awk -F':' '{ print $2}' |awk  '{print $1}'").consumeAsString();
    			double query = Double.parseDouble(resultat);
     
    			valeur.add(query);
     
               }
     
        return(valeur);
    }
     
     
     
     
    }
    et voila comment ma fonction est appelé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dns dns = new Dns("197.25.187.22");
    Vector t = dns.tableau(dns.site());
    double perte=dns.taux(dns.site());

  6. #6
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Ton erreur dit : "Impossible de parser un double, la chaîne que tu me donnes est vide".

    Cette exception est levée ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    			double query = Double.parseDouble(resultat);
    Donc, cela signifie que resultat est une chaîne vide, donc que ta ligne shell
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    			String resultat = sh.command("dig @"+server+" +time=3 "+getRandomElement(V)+"|grep time | awk -F':' '{ print $2}' |awk  '{print $1}'").consumeAsString();
    soit ne retourne rien soit est mauvaise

  7. #7
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    il n'ya pas une possibilité de faire une condition pour vérifier si le résultat peut etre converti en double

    normalement si la commande ne marche pas elle ne m'affiche rien

  8. #8
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    Une idée pour contourner ca?

  9. #9
    Membre averti Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Points : 435
    Points
    435
    Par défaut
    Citation Envoyé par marouene_ Voir le message
    Une idée pour contourner ca?
    Je sais c'est moche, mais un catch de l'erreur sans rien faire derrière ça pourrait passer ? (essaye de mettre au moins un log dans le catch, histoire de savoir ce qu'il se passe quand même )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/03/2012, 16h09
  2. Réponses: 15
    Dernier message: 20/01/2011, 15h47
  3. Réponses: 4
    Dernier message: 18/10/2009, 18h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo