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

avec Java Discussion :

Ajouter une pause entre deux instructions


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de tarpal
    Homme Profil pro
    Ingénieur Electronique retraité
    Inscrit en
    Février 2016
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Electronique retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2016
    Messages : 70
    Par défaut Ajouter une pause entre deux instructions
    Bonjour
    Dans un programme java je souhaite rajouter une pause de 5 secondes entre deux instructions.
    cela me permettra de debugger mon code.
    J'ai mis le code :
    Mais j'ai l'erreur suivante :
    Surrond with Try/Catch mais je ne comprends pas.
    Quelqu'un peut-il me corriger ?
    Sinon comment faire en java avec ECLIPSE pour aller pas à pas ?
    Merci pour vos réponses
    A+

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Normalement, le mieux pour déboguer, c'est d'utiliser le mode debug.

    L'instruction Thread.sleep() permet en effet de mettre en pause un thread. Comme cette pause peut être interrompue, elle soulève une exception de type InterruptedException. En théorie, il faut traiter cette exception en fonction de ce qu'on veut faire si la pause est interrompue. Comme c'est juste pour un test, tu peux te contenter de simplement l'ignorer.

    Attention, toutefois, à l'utilisation de ce genre de trucs dans le thread graphique : mettre en pause le thread graphique signifie bloquer l'interface pendant cette pause (l'affichage comme la réactivité).

    Donc, pour ta seconde question, le mode pas à pas comme tu dis, c'est encore le mieux. Dans Eclipse, tu peux voir juste à gauche du bouton de lancement de programme, un bouton avec un insecte vert (la flêche rouge sur l'image): c'est le lancement du mode debug. C'est juste une alternative du lancement d'exécution normale : ça utilise la même configuration. Si tu n'as jamais lancé le programme, il faudra utiliser le menu contextuel sur le source de la classe qui contient la méthode main, et utiliser le menu "Debug as".

    Il est nécesssaire par ailleurs d'indiquer à quel moment du veux commencer l'exécution pas. Si on commençait dès le début, tu passerais un temps fastidieux à avancer dans le code jusqu'à l'endroit qui t'intéresse, éventuellement même à passer dans les méandres du code interne des classes Java que tu utilises. Il faut donc placer un breakpoint :

    • soit double-cliquer dans la zone située juste à gauche de la réglette avec le numéro de lignes (qui n'est pas affichée par défaut sur toutes les version d'Eclipse : voir la préférence "Show line numbers").
    • soit cliquer avec le bouton droit dans la même zone pour afficher menu contextuel et faire apparaitre les différentes options qui te permettront de contrler les breakpoints.^
    • Enfin, lorsque le mode debug démarre, Eclipse va te proposer de passer dans une perspective spéciale avec des fenêtres dédiées (où tu pourras consulter l'état de tes variables par exemple). Tu verras également une barre d'outils dédier à l'exécution pas à pas, avec des boutons qui ressemblent aux boutons d'un magnétoscopes (pause, stop, avancer) et des boutons juste à droite (des fêches coudées ou courbées) pour avancer pas à pas (descendre dans une méthode, sauter une méthode, remonter à la méthode appelante)

    Dans l'image, j'ai entouré en bleu l'icône qui indique le breakpoint ajouté, dans la zone où il faut double-cliquer et j'ai entouré en jaune les boutons pour contrôler l'exécution.

    Nom : Capture.PNG
Affichages : 2004
Taille : 50,2 Ko
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre confirmé Avatar de tarpal
    Homme Profil pro
    Ingénieur Electronique retraité
    Inscrit en
    Février 2016
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Electronique retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2016
    Messages : 70
    Par défaut
    Merci @joel.drigo @ pour tes explications...
    C'est très clair et ça me fait progresser dans ma connaissance de Eclipse.
    Par contre pour faire mon pas à pas dans le mode Debug je n'ai pas bien compris.
    J'ai 4 fichiers :
    Main
    Fenetre
    PanneauUn
    PanneauDeux
    Tu me dis de lancer le debug dans le Main
    Hors c'est dans ma Class "PanneuUn" que je faire un pas à pas.
    Puis-je avoir plus de précision ?
    Merci de ton suivi
    A+

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Tu as beau avoir plusieurs classes, tu lances ton programme forcément en appelant une méthode "main" (avec la signature public static void main(String[] args) (excepté s'il s'agit d'une applet, ou d'une application web, ou toute autre type de code exécuté dans un container, mais c'est une autre histoire, et ça ne change rien en fait, à part la façon de lancer l'exécution).
    L'exécution d'un code Java en gros, c'est l'exécution dans un thread (processus) d'une séquence d'instructions, qui commence donc pour le thread principale par l'exécution de cette méthode main.
    Le fait que tu aies besoin de déboguer un code dans une autre classe impose juste que tu mettes ton breakpoint juste dans ce code, mais que tu lances ton application exactement de la même manière que si tu le lancais en mode normal (pas debug), qu'il fasse au moins la même chose.
    Mettons que je veuille déboguer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Testeur {
       public static void main(String[] args) {
                  final int a=5;
                  System.out.println(MathUtils.calculFactorielle(a));
                  System.out.println(MathUtils.calculFactorielleRecursivement(a));
       }
    }
    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
    public class MathUtils {
     
    	public static int calculFactorielle(int n) {
    		if ( n<0 ) throw new IllegalArgumentException();
    		int r=1;
    		for(int i=1; i<=n; i++) {
    			r *= n;
    		}
    		return r;
    	}
     
    	public static int calculFactorielleRecursivement(int n) {
    		if ( n<0 ) throw new IllegalArgumentException();
    		if ( n==0 || n==1 ) return 1;
    		return n*calculFactorielleRecursivement(n-1);
    	}
     
    }
    Parce que ça m'affiche :
    3125
    120
    donc qu'il y'a manifestement un problème quelque part (et oui, en plus de constater que les deux résultats qui devraient être égaux alors qu'ils ne le sont pas, j'ai triché et utilisé une calculatrice pour savoir combien donnait 5! ).
    Pour tester, je lance Testeur.main() en exécution normale, et pour déboguer je lance toujours Testeur.main() en debug. Et je vais mettre un breakpoint sur la ligne int r=1 pour suivre l'évolution de mon calcul faux (mais sans avoir à avancer sur le main(), le System.out.println, l'appel de calculFactorielle, tous ça je m'en moque. A la limite, si c'était la mauvaise méthode qui était appelée, mon programme irait jusqu'au bout sans passer par le breakpoint et j'aurais l'information nécessaire pour corriger le problème. A partir de int r=1, je vais donc exécute pas à pas le code :

    1. breakpoint: r=1
    2. step over: r=1, i=1
    3. step over: r=5, i=1
    4. step over: r=5, i=2
    5. step over: r=25, i=2
    6. ...

    (bon, en théorie, au 3, je devrais déjà m'arrêter, parce que r est déjà faux )
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre confirmé Avatar de tarpal
    Homme Profil pro
    Ingénieur Electronique retraité
    Inscrit en
    Février 2016
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Electronique retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2016
    Messages : 70
    Par défaut
    Re,
    J'ai bien réussi à configurer mes Breakpoint : j'ai bien un symbole devant le numéro de ma ligne.
    Par ailleurs si je clik droit sur le numéro de ligne j'ai bien une fenêtre qui s'ouvre où je peux sélectionner "Disable Breakpoint" ou bien "Enable Breakpoinr"
    Jusque là ça va
    Mais tu dis :
    Enfin, lorsque le mode debug démarre, Eclipse va te proposer de passer dans une perspective spéciale avec des fenêtres dédiées (où tu pourras consulter l'état de tes variables par exemple). Tu verras également une barre d'outils dédier à l'exécution pas à pas, avec des boutons qui ressemblent aux boutons d'un magnétoscopes (pause, stop, avancer)
    Hors si je lance le programme en mode debug ( ou en mode normal) je n'ai pas la perspective que tu m'annonces.
    Le programme se lance sans breakpoint
    Je ne comprends pas ce qui se passe
    A+

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    C'est que ça ne passe pas par le breakpoint à priori. Tu as beaucoup de classes ? Tu peux peut-être nous montrer le code ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. Faire une pause entre deux tours de boucles
    Par Mathieu Salles dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 26/01/2013, 18h40
  2. comment ajouter une colonne entre deux colonne automatiquement
    Par nabilophone11 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 16/06/2008, 11h42
  3. mettre une pause entre deux instructions
    Par christianf dans le forum C#
    Réponses: 3
    Dernier message: 21/02/2008, 14h43
  4. Passer une variable entre deux fenêtres
    Par DeezerD dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 17/08/2005, 09h52
  5. Réponses: 14
    Dernier message: 02/05/2005, 18h14

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