Debug en java

cs_dunith Messages postés 100 Date d'inscription samedi 5 janvier 2008 Statut Membre Dernière intervention 11 avril 2008 - 4 mars 2008 à 08:30
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 - 4 mars 2008 à 21:00
bonjour


j'ai créer une classe Debug, pour qu'elle m'afiche les message lors la communication de l'automate avec ma pompe, via RS232;
// la classe pour débugage
class TclsDebug

{

    boolean bDebug = false;

    private static TclsDebug FDebug;

   

    public void AfficheMessage(String mess)

    {

        if (bDebug == true)

        {

            //affichage du message

            System.out.println(mess);

        }

       

    }

   

    public static void Instanciation()

    {

        FDebug = new TclsDebug();

    }

   

    public static TclsDebug GetInstance()

    {

        return FDebug;

    }

    public void ChangeEtatDebug()

    {

        if (bDebug == false)

            bDebug = true;

        else bDebug = false;

    }

}

et ma fonction ChangeEtatDebug(); je l'appelle dans mon programme principale (dans run), quand j'appuie sur D il m'affiche les messages.
while( !fExit )

        {

            try {sleep( 50 );} catch( InterruptedException e ) {}

           

            /* Wait for a character  */

            iTemp = System.in.read();

           

            switch(Character.toUpperCase((char)iTemp))

            {

                case 'Q' : fExit = true; break;

                case 'H' : displayHelp(); break;

                case 'T' : testLed(); break;

                case 'D' : TclsDebug.GetInstance().ChangeEtatDebug();break;

            }

        }

ma question , qu'on j'appuie sur D s'amarche pas tout le temps?

quelq'un peut medire s'il y a une autre façon de faire, ou c'est ma fonction  ChangeEtatDebug(), qui est male implémentée.


Merci

4 réponses

cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
4 mars 2008 à 13:35
salut,

Peut être parce que trop de messages sont envoyés successivement. Essayes avec une méthode synchronisée.

    public synchronized void ChangeEtatDebug()
  {
      if (bDebug = = false)
          bDebug = true;
      else bDebug = false;
  }

D'autre part, l'implémentation de ton singleton est étrange, essayes plutot  :

public static TclsDebug GetInstance()
    {
       if ( FDebug == null) Instanciation();
        return FDebug;
    }

Voire, qqchose comme :

public static TclsDebug GetInstance()
    {

       synchronised(TclsDebug .class) {
            if (FDebug == null) Instanciation();
       }
        return FDebug;
    }
0
cs_dunith Messages postés 100 Date d'inscription samedi 5 janvier 2008 Statut Membre Dernière intervention 11 avril 2008
4 mars 2008 à 14:40
hello


ok je vais testes comme  tu m'avais dit et je te dirai si ça marche!


merci
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
4 mars 2008 à 15:54
petite correction, la synchronisation à la création de l'instance du singleton n'est utile que dans un environnement multithreads
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
4 mars 2008 à 21:00
Un autre détail pour finaliser ton singleton : le constructeur doit être unique et privé. La seule méthode rendant le singleton accessible doit être getInstance() :

public static TclsDebug GetInstance()
    {       if (FDebug null) FDebug new TclsDebug();
        return FDebug;
    }

et tu remplaces : 

 public static void Instanciation()
    {
        FDebug = new TclsDebug();
    }

par

 private TclsDebug() {}
0
Rejoignez-nous