[JAVA] Détecter une erreur

carolcica Messages postés 16 Statut Membre -  
carolcica Messages postés 16 Statut Membre -
Bonjour à tous,

Je suis en train de programmer un petit simulateur à partir d'une librairie de simulation existante.
C'est donc grace à cette librairie que sont générés les éléments et les événements de ma simul : moi j'ai "juste" codé le modèle, c'est à dire selon quel patron arrivent les éléments etc., et ensuite la librairie qui est en fait le véritable simulateur s'occupe de tout faire fonctionner en fonction de ce que j'ai dans mon modèle.

Pour récupérer les infos, j'utilise des listeners. Et donc grace à ça j'ai vu que de temps en temps (c'est aléatoire) dans la génération des événements j'ai une erreur qui est gérée par le simulateur.

Voilà ce qui apparaît dans la console :
#pool-10-thread-1#	ERROR!	[GEN8]	591.3230633636521	Causal restriction broken	591.3230633636521	Ev(es.ull.isaatc.simulation.Generator$GenerateEvent)[587.2742389861271][GEN8]


La classe GenerateEvent :
class GenerateEvent extends DiscreteEvent {
        /**
         * Creates a new element-generation event.
         * @param ts Timestamp when this event must be executed.
         */
        GenerateEvent(double ts) {
            super(ts, Generator.this.defLP);
        }
        
        /**
         * Generates the elements corresponding to this timestamp. After this, 
         * it checks the following event.
         */
        public void event() {
        	preprocess();
        	creator.create(Generator.this);
        	postprocess();
        }
    }


Et dans la classe DiscreteEvent j'ai ces méthodes entre autres :
/**
         * String representation of the event
         * @return A character string "E[#]".
         */
        public String toString() {
            return "Ev(" + getClass().getName() + ")[" + ts + "]" + BasicElement.this.toString();
        }
    
    /**
     * Adds a new event to the element's event list
     * @param e New event.
     */    
    protected void addEvent(DiscreteEvent e) {
        eventList.add(e);
        if (e.getTs() == e.getLp().getTs())
            e.getLp().addExecution(e);
        else if (e.getTs() > e.getLp().getTs())
            e.getLp().addWait(e);
        else
        	error("Causal restriction broken\t" + e.getLp().getTs() + "\t" + e);
    }


Voilà. MA QUESTION : comment puis-je, dans une méthode, vérifier si j'ai l'erreur ???
Car quand l'erreur apparait, la simulation courante s'arrête et passe à la suivante. Par exemple, si j'ai demandé de faire 10 simulations du même modèle, et que dans la simul nº8 l'erreur apparaît, et bien la nº8 s'arrête là où elle est et on passe à la nº9. Mais dans les infos que je récupère, on prend quand même en compte la nº8 jusque là où elle a été et du coup ça fausse les mesures ! Donc je voudrais dire, là où je récupère les infos, que si il y a erreur et bien on ne prend pas en compte. Et je ne sais pas comment dire "si il y a erreur"...

Merci beaucoup de votre aide,
A bientôt
Carole
A voir également:

1 réponse

Sri Lumpa Messages postés 177 Statut Membre 69
 
Pour repérer les erreurs d'exécution qui peuvent apparaitre, tu as l'instruction de contrôle try{....} catch (Exception e) {... }

Tu mets dans le bloc 'try' les instructions que tu souhaites contrôler et dans le bloc d'instruction suivant le 'catch' ta gestion de l'erreur (annulation de l'enregistrement etc...).
Tu peux faire suivre le bloc 'try' par plusieurs 'catch' différents pour récupérer des exceptions différentes...

J'espère avoir été suffisamment clair :s
1
carolcica Messages postés 16 Statut Membre 8
 
Merci de ta réponse, mais ce n'est pas exactement ce que je veux savoir :-/
Je connais déjà le bloc try{} catch(){}, et mon souci vient du fait que je ne sais pas comment faire référence à l'erreur dont je parle quand je veux la "catcher". L'erreur apparaît dans la dernière ligne du code que j'ai mis dans mon 1er post.
0
sandul Messages postés 4013 Statut Membre 723 > carolcica Messages postés 16 Statut Membre
 
mmm, heuuu :)
vas bien? :-d

Il ne s'agit pas d'une exception à proprement parler... tout ce que ton error() fait c'est écrire à la console. Du coup, un try...catch ne détectera rien, car il n'y a rien à détecter.

Faire une analyse et voir s'il est judicieux de lancer une erreur depuis sighos lorsque certaines conditions sont réunies. Ceci implique donc la modification des sources sighos et la récompilation.

++
0
carolcica Messages postés 16 Statut Membre 8 > sandul Messages postés 4013 Statut Membre
 
hehe ouais ça va ça avance pas trop mal...
bon pour ça oui je savais pas trop si ce truc où il mettait "error" ça correspondait bien à une erreur ou pas...
du coup j'ai pensé à un autre test, c'est pas aussi clean que lancer une exception mais je pense que ça fonctionnera, je teste ça et mettrai résolu si ça marche ;)

bye !
0