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 :

bouton qui reste appuyé


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut bouton qui reste appuyé
    Bonjour, (je débute en Java)

    mon application lance un JFRame+JPanel qui affiche des choses (graphiques) avec une méthode bouclePrinicipale() puis un fois l'affichage terminé affiche un bouton pour 'relancer' le traitement.

    Quand je clique sur le bouton, il relance bien la méthode bouclePrincipale() mais le JPanel n'affiche plus rien tant que la boucle de traitement n'est pas terminé puis enfin le bouton passe en relâchement.

    Le code du clic sur le bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void mouseClicked(MouseEvent arg0) {
    		// TODO Auto-generated method stub
    		TpsReac.bouclePrincipale();
    	}
    Le paintComponent de mon JPanel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void paintComponent(Graphics g){
    		g.setColor(Color.BLUE);
    		g.fillRect(0, 0, this.getWidth(), this.getHeight());
    		if (TpsReac.getI() < 5) {
    			d.dessine(g);
    		} else {
    			this.add(bRedemarrer);
    			this.validate();
    			fini(g);
    		}
    		afficheScore(g);
    	}
    Bref, la méthode associée au clic bloque tout tant qu'elle ne se termine pas.
    Comment faire ?

    merci

  2. #2
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Par défaut
    Bonjour,

    Si tu souhaites que ton affichage ne soit pas affecté par un traitement il faut que tu fasses ton traitement dans un Thread.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut
    Citation Envoyé par XxArchangexX Voir le message
    [...]il faut que tu fasses ton traitement dans un Thread.
    merci !
    j'ai eu un peu de mal à mettre ça en place mais ça fonctionne !!

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut
    En fait ça fonctionne très bien mais pas dans une applet dans laquelle une erreur se produit lors de l'appui sur le bouton. Ainsi, l'applet est utilisable une première fois jusqu'à cet appui (le thread ne semble pouvoir s'instancier qu'une fois et une seule)

    ma méthode init() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void init() {
    		// TODO Auto-generated method stub	public Panneau p = new Panneau();
    		this.setSize(LARGEUR,HAUTEUR);
    		Panneau p = new Panneau();
    		Container u = getContentPane();
    		u.add(p);
     
    		e = new Execution(p);
    		e.start();
    	}
    mon appel du bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void mouseClicked(MouseEvent arg0) {
    		// TODO Auto-generated method stub
    		Execution e = new Execution(TpsReac.p);
    		e.start();
    	}
    l'erreur :
    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
    Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
    	at Execution.<init>(TpsReac.java:40)
    	at Bouton.mouseClicked(Bouton.java:21)
    	at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270)
    	at java.awt.Component.processMouseEvent(Component.java:6271)
    	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
    	at java.awt.Component.processEvent(Component.java:6033)
    	at java.awt.Container.processEvent(Container.java:2045)
    	at java.awt.Component.dispatchEventImpl(Component.java:4629)
    	at java.awt.Container.dispatchEventImpl(Container.java:2103)
    	at java.awt.Component.dispatchEvent(Component.java:4455)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4633)
    	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4306)
    	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4227)
    	at java.awt.Container.dispatchEventImpl(Container.java:2089)
    	at java.awt.Component.dispatchEvent(Component.java:4455)
    	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:649)
    	at java.awt.EventQueue.access$000(EventQueue.java:96)
    	at java.awt.EventQueue$1.run(EventQueue.java:608)
    	at java.awt.EventQueue$1.run(EventQueue.java:606)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
    	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:116)
    	at java.awt.EventQueue$2.run(EventQueue.java:622)
    	at java.awt.EventQueue$2.run(EventQueue.java:620)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:619)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
    	at Execution.<init>(TpsReac.java:40)
    	at Bouton.mouseClicked(Bouton.java:21)
    Tu n'a plus qu'à aller voir ce qui est null à cette ligne en question (TpsReac.java:40)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Tu n'a plus qu'à aller voir ce qui est null à cette ligne en question (TpsReac.java:40)
    Merci, en effet c'est étrange :
    Mon objet Panneau (JPanel) contient un objet Disque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class Panneau extends JPanel implements MouseListener {
     
    	// on commence par définir le disque à l'extérieur
    	public Disque d = new Disque(-10,-10,10,Color.RED);
    À l'instanciation de l'objet Panneau la première fois, pas de souci, tout s'exécute (mon Thread).

    Puis le même appel (sans destruction de l'objet Disque) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	@Override
    	public void mouseClicked(MouseEvent arg0) {
    		// TODO Auto-generated method stub
    		Execution e = new Execution(TpsReac.p);
    		e.start();
    	}
    via le bouton semble me détruire l'objet Disque....

    Mon constructeur Execution() dans sa classe :
    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
    class Execution extends Thread{
    	//
    	public static int nbJeux = 0;
    	//
    	public static int score;
    	public static long instant;
    	public static int[] resultat = new int[5];
    	public static long[] resultatTps =new long[5];
    	//
    	private static int i;
    	private static long tps;
    	private static int s, w, h, rayon, min, xmax, ymax;
    	private static Disque c;
    	private Panneau p;
     
    	public Execution (Panneau p){
    		this.p = p;
    		c = p.d;
    		w = TpsReac.LARGEUR;
    		h = TpsReac.HAUTEUR;
    		rayon = p.d.getRayon();
    		min = rayon;
    		xmax = w - rayon;
    		ymax = h - rayon;
    		//
    		nbJeux++;
    		//System.out.println("Jeu n°" + nbJeux);
    	}
    .....etc....
    d est l'objet disque instancié dans mon Panneau p.
    J'ai du loupé quelque chose..

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

Discussions similaires

  1. [AC-2003] Bouton qui reste enfoncé
    Par Daejung dans le forum IHM
    Réponses: 8
    Dernier message: 20/03/2010, 12h24
  2. Bouton qui reste enfoncé
    Par hellozelo dans le forum IHM
    Réponses: 3
    Dernier message: 14/05/2008, 12h17
  3. un bouton qui reste enfoncé..
    Par lesartsde dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 28/02/2008, 22h15
  4. Bouton qui reste en position enfoncee %#
    Par zertooo dans le forum Flash
    Réponses: 7
    Dernier message: 02/02/2007, 10h11
  5. [wxpython] bitmap bouton qui reste pressé
    Par hysah dans le forum wxPython
    Réponses: 3
    Dernier message: 20/01/2006, 20h41

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