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

2D Java Discussion :

Repaint() qui me fait une fuite de memoire


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut Repaint() qui me fait une fuite de memoire
    Bonsoir,


    Mon application fonctionne mais j'ai un petit soucis de memoire.

    elle consomme au demarrage 110mo et ca augmente petit a petit jusqua se stabile a 400, 450mo au bout d'une vingtaine de minute et generalement sa suit par un ralentissement de mon pc et l'appi s'arrete.

    En cherchant dans mon code, j'arrive a arrete le probleme de la memoire qui augmente mais je perd toute l'interface de mon application.

    C'est a dire que j'ai les fonction lié a mes touche mais je n'es pas les changement de texte, animation qui vont avec.


    Voici une partie du code, c'est le "repaint" qui me pose soucis a priori, si je l'enleve plus de fuite de memoire, mais plus d'animation. XD

    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
    48
    49
    50
    51
    52
    53
    54
      private Main() throws IOException {
            setLocationRelativeTo(null);
            setUndecorated(false);
            setSize(616, 349);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            Action action = new Action();
            setContentPane(action);
            setIconImage(new ImageIcon("src/images/icone.gif").getImage());
            setTitle("R1beLlu");
            setLocationRelativeTo(null);
            setAlwaysOnTop(true);
            setResizable(false);
            setUndecorated(true);
            setBackground(new Color(0, 0, 0, 0));
            setVisible(true);
     
           MouseListener.executorService.execute(() -> {
               while (!MouseListener.executorService.isShutdown()) {
                   action.repaint();                                                                                                           //le probleme est ici
                   try {
                       Thread.sleep(50);
                   } catch (Exception e) {
                       e.printStackTrace();
                   }
               }
           });
     
     
     
           try {
     
                setupConfigs();
     
                setupEvents();
            } catch (NativeHookException ex) {
                System.exit(1);
            }
     
            addMouseListener(new MouseAdapter() {
     
                public void mousePressed(MouseEvent e) {
                    posX = e.getX();
                    posY = e.getY();
                }
            });
     
            addMouseMotionListener(new MouseMotionAdapter() {
     
                public void mouseDragged(MouseEvent e) {
                    int depX = e.getX() - posX;
                    int depY = e.getY() - posY;
                    setLocation(getX() + depX, getY() + depY);
                }
            });

    Une petite idee de comment pallier le probleme?


    Merci


    Fred

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 099
    Par défaut
    Difficile a dire sans voir la classe Action et ce qu'elle fait dans le paint().
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut
    Bonjour,

    j'ai trouve le soucis,

    merci

    Fred

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 099
    Par défaut
    N hésite pas a partager ta solution pour les autres personnes qui pourraient rencontrer le meme problème.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut
    Bonjour,

    Alors c'est louche mais ca fonctionne....

    en faite ma "fuite de memoire" s'arrete d'elle meme a 400 mo utilise et mon programme fonctionne toujours

    J'ai essaye de modifie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      MouseListener.executorService.execute(() -> {
     
                while (!MouseListener.executorService.isShutdown()) {
     
                   action.repaint();
                    try {
                        Thread.sleep(50);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });

    en augmentant ou baissant la valeur et ca fais que je monte plus ou moins vite a 400 mo de memoire utilise.

    Et aussi, 50 est la meilleur valeur, car si je baisse ou augmente, mon utilisation processeur qui est de 0.4% A 50 monte a 16% d'utilisation.

    La classe action regroupe tout le graphisme de mon appli en swing .

    Si je retire le "repaint" mon programme marche mais je n'es plus les changement de couleur des boutons etccc, ca reste fige sauf si je glisse ma

    fenetre sur mon deuxieme ecran, la ca change....

    je suis encore en train de travaille la dessus en esperant trouve une solution.


    Probleme etrange, solution etrange

    Merci

    Fred

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 911
    Billets dans le blog
    54
    Par défaut
    Un ExecutorService statique dans un MouseListener qui fait une boucle infinie ? Ça sent l'architecture bien propre ça encore...

    Encore une fois on ne sait pas ce que tu fais dans ton code de dessin donc on ignore si tu pense a appeler dispose() sur tes Graphics2D temporaires (si jamais tu en as créés), si tu tiens compte du clip (apparemment pas car tu sembles faire un repaint() global sur toute la surface et non pas juste sur la zone modifiée), ni si tu crée 45.000 objets dans ce code de rendu ou si au contraire tu réutilises des objets déjà pré-alloués.
    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

Discussions similaires

  1. provoquer une fuite de memoire ?
    Par tastika dans le forum Général Java
    Réponses: 3
    Dernier message: 27/03/2009, 16h40
  2. fonction qui me fait une erreur
    Par griese dans le forum Langage
    Réponses: 12
    Dernier message: 28/07/2006, 09h46
  3. Réponses: 6
    Dernier message: 13/11/2005, 12h11
  4. fuite de memoire dans une liste de pointeur sur composant
    Par Nicolos_A dans le forum Composants VCL
    Réponses: 2
    Dernier message: 16/12/2004, 08h46
  5. fonction qui en fait planter une autre
    Par ickis dans le forum C
    Réponses: 5
    Dernier message: 18/08/2003, 21h33

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