Problème System.out.println en commentaire

Nico38g Messages postés 5 Date d'inscription mardi 7 juillet 2009 Statut Membre Dernière intervention 10 juillet 2009 - 7 juil. 2009 à 14:19
Nico38g Messages postés 5 Date d'inscription mardi 7 juillet 2009 Statut Membre Dernière intervention 10 juillet 2009 - 10 juil. 2009 à 11:11
Bonjour à tous !
Je suis actuellement en stage, et j'ai à reprendre un projet JAVA écrit précédemment.
Le problème que je rencontre est que l'application fonctionne très bien cependant lorsque je commente une ligne avec un '"System.out.println" alors l'appli ne marche plus.
Voici le code mis en cause :

int grey = input.read();
                    if(grey != -1)
                    {
                        System.out.println("Datamanager : Couleur pixel n°"+i+" == "+grey);//Si cette ligne est supprimer aucune lecture est faire. J'ai pas compris pourquoi
                        this.setPixel(i, grey); //On delegue la responsabilite de la gestion des données d'une image au gestionnaire de données
                      ...

Si quelqu'un pouvait m'aider ça serait cool
J'ai cru voir qu'on pouvait remplacer les println par de log4j, mais je ne sais pas du tout comment faire car finalement l'affichage console de cette information ne m'intéresse pas car il ralentit le programme.

Merci d'avance
Nicolas 

8 réponses

Utilisateur anonyme
7 juil. 2009 à 17:38
Salut,

La lecture étant faite à l'intérieur des () du print, si tu supprimes tout, on ne la fait plus...
Supprime donc System.out.println mais garde cette lecture.

Cordialement,

Dan

...\ Dan /...
0
Nico38g Messages postés 5 Date d'inscription mardi 7 juillet 2009 Statut Membre Dernière intervention 10 juillet 2009
7 juil. 2009 à 21:06
Bonsoir,
Je ne vois pas de quel lecture vous parlez car il s'agit seulement d'affichage la lecture est réalisée plus haut.
Merci
0
Utilisateur anonyme
7 juil. 2009 à 23:37
Re,


Peux tu me dire ce qu'affiche ce print? merci



...\ Dan /...
0
Nico38g Messages postés 5 Date d'inscription mardi 7 juillet 2009 Statut Membre Dernière intervention 10 juillet 2009
8 juil. 2009 à 09:37
Oui bien sur il affiche quelque chose du genre :
"
Datamanager : Couleur Pixel n°18 == 224
"
Avec la lecture de grey réalisé plus haut par grey=input.grey (lecture d'un flux RS232)
0

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

Posez votre question
Utilisateur anonyme
8 juil. 2009 à 09:54
Et que penses tu que fait this s'il n'a plus ce résultat ?

...\ Dan /...
0
Nico38g Messages postés 5 Date d'inscription mardi 7 juillet 2009 Statut Membre Dernière intervention 10 juillet 2009
8 juil. 2009 à 13:20
En fait je viens de faire quelques test et je me suis rendu compte que le problème ne vient pas de l'affichage mais plutôt du fait que l'utilisation du println() ralentit le programme et alors cela fonctionne.
Si je supprime la ligne les valeurs de grey, i sont bonnes mais je ne parcours plus la boucle suffisemment de fois.

Voici une partie plus importante du code, et le problème vient de input.available() qui, si le println est supprimé, a une valeur bien inferieure :

public void portEvent(PortEvent evt) {

        switch (evt.getEventType()) {

        //Des données sont disponibles depuis le port
        case PortEvent.DATA_AVAILABLE:
            //System.out.println("DataManager : Receive PORTEVENT.DATA_AVAILABLE");

            InputStream input = null;

            try {

                input = this.myPort.getInputStream();

                int maxpixel = this.mySensorManager.getCurrentSensor().getCapacity(); //height*weight

                //Construction d'une image du capteur
                int i = 0;
                while ((input.available() > 0) && (i<maxpixel)) {
                    System.out.println("DataManager : Reste "+input.available()+" octets a lire");
                    //System.out.println("DataManager : Lecture de données");
                    int grey = input.read();
                    if(grey != -1)
                    {
                        System.out.println("Datamanager : Couleur pixel n°"+i+" == "+grey); //Si cette ligne est supprimer aucune lecture est faire. J'ai pas compris pourquoi
                        this.setPixel(i, grey); //On delegue la responsabilite de la gestion des données d'une image au gestionnaire de données
                       
                        if(i == maxpixel-1)
                        {
                            System.out.println("DataManager : Demande d'envoi de données d'une nouvelle image");
                            try {
                                Thread.sleep(5000);
                            } catch (InterruptedException e1) {
                                // TODO Auto-generated catch block
                                e1.printStackTrace();
                            }
                            this.myPort.getOutputStream().write(1);
                            try {
                                Thread.sleep(100);
                            } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                    }
                    else
                    {
                        System.out.println("DataManager : Plus aucune données a lire");
                    }
                    i++;
                }

            } catch (IOException e) {
                e.printStackTrace();
            }

            break;

        default:
            break;
        }
    }
0
Kotomine Messages postés 112 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 5 novembre 2009
9 juil. 2009 à 10:37
Salut, t'es tombé dans un problème classique de conditions de concurrence de type producteur/consommateur  on dirait bien.

Fais attention à ton design, et essaye de l'adapter pour que la vitesse du CPU n'influe pas sur le comportement de ton programme ( Pense toujours que c'est ton OS (windows, linux, ..) qui schedule tes threads/applications, et peut te balancer ton datamanager sur un CPU(ou core) 4x plus rapide que celui qui va faire tourner le code qui envoit les données à ton datamanager)

Un petit lien  ici

http://www.infres.enst.fr/~domas/TP-Java-Conc-2.html

;I'm just keeping the hopeless cross to increase the meaninglessness
0
Nico38g Messages postés 5 Date d'inscription mardi 7 juillet 2009 Statut Membre Dernière intervention 10 juillet 2009
10 juil. 2009 à 11:11
Bonjour !
Merci pour ta réponse car je me suis aperçu que c'est exactement mon problème : synchronisation entre threads ...
J'en avais entendu parler et je viens de l'essayer ...  
Je suis en train de résoudre tout ça, je fais au mieux : je change par exemple l'utilisation de la méthode available() car elle était mal utilisée.
Je vous tiens au courant et encore merci ! 
0
Rejoignez-nous