[JAVA] Détecter une erreur
carolcica
Messages postés
16
Statut
Membre
-
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 :
La classe GenerateEvent :
Et dans la classe DiscreteEvent j'ai ces méthodes entre autres :
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
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:
- [JAVA] Détecter une erreur
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Comment détecter un traceur sur téléphone - Accueil - Confidentialité
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
1 réponse
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
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
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.
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.
++
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 !