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 :

Application bloquée à la première exécution


Sujet :

Java

  1. #1
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 20
    Par défaut Application bloquée à la première exécution
    Bonjour,

    J'ai développé une application libre en Java pour l'apprentissage de la lecture musicale : http://www.jalmus.net

    Il s'agit d'executables générés par JBuilder que j'installe avec Izpack. J'ai eu plusieurs retours (XP,MAC) indiquant que le logiciel bloque à la première exécution avec une utilisation à 90% du CPU.

    Pouvez-vous la tester et d'où ce problème pourrait-il venir ?

    Merci,

    Christophe

  2. #2
    Membre éclairé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Par défaut
    Je viens de télécharger et lancer ton application. Effectivement, au lancement de l'appli, 100% du proc est utilisée.
    Mais ca me le fait à chaque lancement. A mon avis, il doit y avoir une boucle infinie quelque part

  3. #3
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par chris28200
    Bonjour,

    J'ai développé une application libre en Java pour l'apprentissage de la lecture musicale : http://www.jalmus.net

    Il s'agit d'executables générés par JBuilder que j'installe avec Izpack. J'ai eu plusieurs retours (XP,MAC) indiquant que le logiciel bloque à la première exécution avec une utilisation à 90% du CPU.

    Pouvez-vous la tester et d'où ce problème pourrait-il venir ?

    Merci,

    Christophe
    Tu pourrais faire un .zip des sources (je n'ai pas d'outil svn -ou je ne sais pas comment m'en servir-) merci

    EDIT : j'avais pas vu, ça installe les sources

  4. #4
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    A priori je dirais que ta classe RenderingThread en est la cause (vu le code o_O):
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    while (true) {
                 try {
                   if (ecranjeu == 1) {
     
                     if (type2 == "NOTES" | type2 == "ALTERATIONS") {
                       sleep(vitesse);
     
                     }
                     else if (type2 == "INTERVALLES")
                       sleep(vitesse * 3 / 2);
                     else if (type2 == "ACCORDS")
                       sleep(vitesse * 2);
                     else
                       sleep(vitesse + 18);
     
                     if (parti) {
                       if (type == "NORMAL" &
                           (type2 == "NOTES" | type2 == "ALTERATIONS"))
                         ncourante.setX(ncourante.getX() + 1);
                       else if (type == "NORMAL" & type2 == "ACCORDS")
                         acourant.avance(1);
                       else if (type == "NORMAL" & type2 == "INTERVALLES")
                         icourant.avance(1);
                       else if (type == "LIGNE" &
                                (type2 == "NOTES" | type2 == "ALTERATIONS"))
                         for (int i = 0; i < ligne.length; i++) {
     
                           ligne[i].setX(ligne[i].getX() - 1);
                         }
     
                       else if (type == "LIGNE" & type2 == "ACCORDS")
                         for (int i = 0; i < ligneacc.length; i++) {
                           ligneacc[i].avance( -1);
                         }
     
                       else if (type == "LIGNE" & type2 == "INTERVALLES")
                         for (int i = 0; i < ligneint.length; i++) {
                           ligneint[i].avance( -1);
     
                         }
                     }
                     panelanim.repaint();
                   }
                 }
                 catch (Exception e) {}
               }
             }
    Déjà, un while(true) suivi d'un if, si la condition du if est fausse, ça fait une attente active qui prend énormément de ressources. Ensuite, tu ne devrais pas avoir besoin de demander un rafraichissement basé sur le temps (toutes les 10ms), mais plutôt basé sur des évènements. Et de plus, tout ce qui est affichage graphique, c'est à faire dans l'EDT...

    (sinon, tu faisais du C avant, non? je dis ça pour ta classe jalmus.java et les déclarations de variables interminables^^. Et le code est plutôt "impératif" que "objet")

  5. #5
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 20
    Par défaut
    Merci beaucoup wizaord et ®om. La condition dans le thread était bien la cause du problème de CPU : je vais demander aux utilisateurs si cela résoud leur blocage.

    J'ai d'abord programmé en C et j'apprend le Java au fur et à mesure que j'améliore mon application : je rajoute des fonctionnalités quand le temps me le permet sans vraiment avoir de plan et le code n'est pas très propre (et encore j'ai fait un petit peu le ménage).

    Pour l'affichage graphique dan l'EDT peux tu me donner des détails. Merci.

    Christophe

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Vas voir le tuto suivant pour ce qui concerne l'EDT:

    http://gfx.developpez.com/tutoriel/j...ing-threading/

  7. #7
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 900
    Billets dans le blog
    54
    Par défaut
    Un rafraichissement automatique peut quand meme avoir son utilite mais c'est clair qu'il faut laisser le temps a l'EDT de pouvoir s'executer.
    =>une Thread avec un appel a la methode sleep() a la fin de la boucle. Attentions au interractions entre cette thread et l'EDT cependant.
    =>ou un Timer Swing qui se repetera a intervalle regulier.

    Rajouter une demande de raffraichissement lors de la reception d'evenements c'est tres bien aussi (mais ca demandera plus d'adaptation du code C-like).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  8. #8
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 20
    Par défaut
    Merci beaucoup pour votre aide, je vais essayer d'optimiser un peu mon animation.

    Christophe.

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

Discussions similaires

  1. Comment masquer une application en cours d'exécution
    Par wajdiisi2007 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 29/08/2007, 00h45
  2. [Cookies] Détecter première exécution d'un script
    Par WalidNat dans le forum Langage
    Réponses: 2
    Dernier message: 30/06/2007, 19h54
  3. [MySQL] Update ne fonctionnant pas à la première exécution
    Par isa150183 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 10/11/2006, 18h25
  4. [C++][SOCKET]recv() bloque la première fois
    Par xwindoo dans le forum Développement
    Réponses: 15
    Dernier message: 18/08/2006, 20h57
  5. Application bloquée
    Par bilal_ini dans le forum Langage
    Réponses: 4
    Dernier message: 22/11/2005, 14h32

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