Utilisation java.awt.Robot

umafaid Messages postés 6 Date d'inscription jeudi 1 février 2007 Statut Membre Dernière intervention 30 juillet 2007 - 23 juil. 2007 à 09:02
umafaid Messages postés 6 Date d'inscription jeudi 1 février 2007 Statut Membre Dernière intervention 30 juillet 2007 - 23 juil. 2007 à 14:04
Bonjour,


j'utilise la classe Robot pour me déplacer automatiquement sur un
panel. Mais j'aimerais que le robot s'arrête au clic de l'utilisateur et qu'un point soit créé.


J'ai un thread qui exécute le code du robot. Et j'appelle ce thread
dans mon MouseClicked, juste avant que l'utilisateur puisse cliquer
pour sélectionner son point. Seulement, le clic, ne fait rien, le robot
continue à se déplacer automatiquement. Est ce que quelqu'un saurait
comment je peux régler ce problème?


Voici mon code:


thread implémentant le robot 


import java.awt.Robot;


public class FirstThread extends Thread {


   PanelParallèle p;


   boolean actif;


   


   


    public FirstThread(PanelParallèle p) {


       this.p =p;


       this.actif=false;


       


    }


    public void run() {


       actif=true;


       


       while(actif==true){


           


          try{


               Robot r= new Robot();


               for (int i = 0; i < 300; i++)


                 {


                    for (int j = 0; j < 300; j++)


                    {


                       if ((j - (p.coefDir2 * i) - (p.absOr2 * 20))
< 0.5f && (j - (p.coefDir2 * i) - (p.absOr2 * 20)) >
-0.5f)


                       r.mouseMove((int)(i+p.getLocationOnScreen().getX()),(int)(j+p.getLocationOnScreen().getY()));


                    }


                 }


               //Thread.yield();


            }


             catch(Exception ex){


                System.out.println("Exception :"+ex.getMessage());


             }


                }


    }


   


    public void setActif(boolean a){


       actif=a;    


    }


}


méthode mouseClicked qui exécute le thread

public void mouseClicked(MouseEvent e)


   {


   Graphics g = getGraphics();


 if(etape==5){


         System.out.println("dans 6ème étape");


        thr1 = new FirstThread(this);   


        //SwingUtilities.invokeLater(thr1);


        thr1.start();


        System.out.println("fin thread");


      }


     


      if(etape==6){


         System.out.println("dernière étape");


           thr1.setActif(false);


           System.out.println(thr1.actif);


           thr1=null;


        


           p4 = new MonPoint(e.getX(),e.getY());


                  


           System.out.println("p4 x" +p4.x);


           System.out.println("p4 y" +p4.y);


                    p4.affiche(g);


                    li.add(p4);


                    forme.add(p4);


                 


                    Ligne l2 = new Ligne(li.size());


                    MonPoint[] tab = new MonPoint[li.size()];


                    for (int k=0; k<li.size(); k++){


                    tab[k]=li.get(k);


                    l2.points=tab;


                    }


                    l2.affiche(g);


                    forme.add(l2);   


           }


      etape++;


    }

Merci d'avance pour l'aide

10 réponses

KenZara Messages postés 112 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 20 décembre 2011
23 juil. 2007 à 12:06
Bonjour,

J'ai plusieurs questions à te poser afin de mieux comprendre le fonctionnement, je vois que dans la méthode mouseClicked y a une variable etape à quel moment était elle initialisé? Arrives tu à avoir le message: "dernière étape" ? autre point, et il se peut que je me trompe, (j'ai pas eu le temps de vérifier) n'est il pas meilleur de killer ton thread au lieu de le mettre à null? Enfin bref, j'avais lu quelque part (une source que j'ai pas vérifié) que tu peux toujours utiliser System.gc(); afin de permettre au garbage collector de bien faire le nettoyage :) cette ligne de code que tu pourras mettre éventuellement aprés ta ligne: thr1=null;

Kenza
0
umafaid Messages postés 6 Date d'inscription jeudi 1 février 2007 Statut Membre Dernière intervention 30 juillet 2007
23 juil. 2007 à 13:21
En fait, je n'ai mis que la partie qui me pose problème dans la méthode mouseClicked. Je n'ai pas le message "dernière étape" car mon Robot ne s'arrête pas au clic suivant. Il s'arrête après plusieurs clics et j'ai bien le message qui s'affiche. Mais j'aimerais que ce soit fait au premier clic après le robot. Je ne sais pas si c'est plus clair
0
KenZara Messages postés 112 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 20 décembre 2011
23 juil. 2007 à 13:58
Affirmatif. Mais ce qui me pose problème c'est la variable etape à quel moment est elle initialisé? Et à quoi correspond la valeur que tu lui attribues, si le message d'erreur n'apparaît qu'aprés moulte tentaives de click, il est peut être normal à cause de cette variable, parce que là la question qui se pose ce n'est pas le fait que le thread ne s'arrête pas mais le fait que ton bout de code ne se lance pas pour une raison ou pour une autre. Si le problème serait le thread, as tu essayé la ligne que je t'ai proposé le system.gc(); et est ce que ça répondait à l'autre moitié de ta question.
Kenza  
0
KenZara Messages postés 112 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 20 décembre 2011
23 juil. 2007 à 13:58
Affirmatif. Mais ce qui me pose problème c'est la variable etape à quel moment est elle initialisé? Et à quoi correspond la valeur que tu lui attribues, si le message d'erreur n'apparaît qu'aprés moulte tentaives de click, il est peut être normal à cause de cette variable, parce que là la question qui se pose ce n'est pas le fait que le thread ne s'arrête pas mais le fait que ton bout de code ne se lance pas pour une raison ou pour une autre. Si le problème serait le thread, as tu essayé la ligne que je t'ai proposé le system.gc(); et est ce que ça répondait à l'autre moitié de ta question.
Kenza  
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
KenZara Messages postés 112 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 20 décembre 2011
23 juil. 2007 à 13:59
Affirmatif. Mais ce qui me pose problème c'est la variable etape à quel moment est elle initialisé? Et à quoi correspond la valeur que tu lui attribues, si le message d'erreur n'apparaît qu'aprés moulte tentaives de click, il est peut être normal à cause de cette variable, parce que là la question qui se pose ce n'est pas le fait que le thread ne s'arrête pas mais le fait que ton bout de code ne se lance pas pour une raison ou pour une autre. Si le problème serait le thread, as tu essayé la ligne que je t'ai proposé le system.gc(); et est ce que ça répondait à l'autre moitié de ta question.
Kenza  
0
KenZara Messages postés 112 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 20 décembre 2011
23 juil. 2007 à 14:00
Affirmatif. Mais ce qui me pose problème c'est la variable etape à quel moment est elle initialisé? Et à quoi correspond la valeur que tu lui attribues, si le message d'erreur n'apparaît qu'aprés moulte tentaives de click, il est peut être normal à cause de cette variable, parce que là la question qui se pose ce n'est pas le fait que le thread ne s'arrête pas mais le fait que ton bout de code ne se lance pas pour une raison ou pour une autre. Si le problème serait le thread, as tu essayé la ligne que je t'ai proposé le system.gc(); et est ce que ça répondait à l'autre moitié de ta question.
Kenza  
0
KenZara Messages postés 112 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 20 décembre 2011
23 juil. 2007 à 14:01
 


Affirmatif. Mais ce qui me pose problème c'est la variable etape à quel moment est elle initialisé? Et à quoi correspond la valeur que tu lui attribues, si le message d'erreur n'apparaît qu'aprés moulte tentaives de click, il est peut être normal à cause de cette variable, parce que là la question qui se pose ce n'est pas le fait que le thread ne s'arrête pas mais le fait que ton bout de code ne se lance pas pour une raison ou pour une autre. Si le problème serait le thread, as tu essayé la ligne que je t'ai proposé le system.gc(); et est ce que ça répondait à l'autre moitié de ta question.
Kenza  
0
KenZara Messages postés 112 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 20 décembre 2011
23 juil. 2007 à 14:01
 


Affirmatif. Mais ce qui me pose problème c'est la variable etape à quel moment est elle initialisé? Et à quoi correspond la valeur que tu lui attribues, si le message d'erreur n'apparaît qu'aprés moulte tentaives de click, il est peut être normal à cause de cette variable, parce que là la question qui se pose ce n'est pas le fait que le thread ne s'arrête pas mais le fait que ton bout de code ne se lance pas pour une raison ou pour une autre. Si le problème serait le thread, as tu essayé la ligne que je t'ai proposé le system.gc(); et est ce que ça répondait à l'autre moitié de ta question.
Kenza  
0
KenZara Messages postés 112 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 20 décembre 2011
23 juil. 2007 à 14:02
 


Affirmatif. Mais ce qui me pose problème c'est la variable etape à quel moment est elle initialisé? Et à quoi correspond la valeur que tu lui attribues, si le message d'erreur n'apparaît qu'aprés moulte tentaives de click, il est peut être normal à cause de cette variable, parce que là la question qui se pose ce n'est pas le fait que le thread ne s'arrête pas mais le fait que ton bout de code ne se lance pas pour une raison ou pour une autre. Si le problème serait le thread, as tu essayé la ligne que je t'ai proposé le system.gc(); et est ce que ça répondait à l'autre moitié de ta question.
Kenza  
0
umafaid Messages postés 6 Date d'inscription jeudi 1 février 2007 Statut Membre Dernière intervention 30 juillet 2007
23 juil. 2007 à 14:04
oui, j'ai mis la ligne System.gc(). Ma variable etape est initialisée bien avant et de etape== 0 à etape==5, tout fonctionne bien à chaque clic, je passe à l'étape suivante. Mais pour passer de etape5 à etape6 , un seul clique ne suffit pas.
0
Rejoignez-nous