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 ME Discussion :

destruction d'objet canvas.


Sujet :

Java ME

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 6
    Par défaut destruction d'objet canvas.
    Bonjour à tous les coders !!

    Je travaille actuellement sur un jeu en J2ME (MIDP 1.0) qui me pose un petit problème de mémoire. J'ai 3 classes au total (la midlet, un canvas qui s'occuppe de la gestion et de l'affichage des menus, un canvas qui prend en charge la gestion et le rendu du jeu).
    A l'heure actuelle, la midlet arrive à passer d'un canvas à l'autre sans problème, mais il semblerait qu'elle n'arrive pas à nettoyer la mémoire (retirer toute trace d'un canvas avant de lancer l'autre) ce qui pose un gros problème de heap. Est-il seulement possible d'effacer un canvas de la mémoire ? lorsqu'un objet est créé à partir d'un canvas, existe-t-il vraiment en mémoire avec toutes ses methodes héritées ? Cela a-t-il un sens de vouloir gagner de la place de heap en essayant de supprimer l'objet canvas instancié ?

    voici le code de la methode startApp() de la midlet (appellé à chaque changement de mode) :

    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
     
    protected void startApp()
    {
      if (!started)
      {
        started = true;
        display = Display.getDisplay(this);
        exitCommand = new Command("Exit", Command.EXIT, 0 );
      }
     
      if (menu_mode)	// ce booleen permet d'identifier le canvas à utiliser
      {
        // Mode MENU
        System.out.println("Switching display to Menu...");
        game_canvas = null;	//censé "vider" l'objet canvas ?
        System.gc();
        menu_canvas = new MenuCanvas(this);	// l'objet canvas pour le menu
      }
      else
      {
        // Mode race engine
        System.out.println("Switching display to race engine...");
        menu_canvas = null;
        System.gc();
        game_canvas = new GameCanvas(this);	// l'objet canvas pour le jeu
      }
     
        display.setCurrent(the_canvas);
     
    }
    Chaque canvas possède son thread et j'ai des system.out.println dans leur methode run() qui m'indiquent qu'une fois lancé, le thread ne finit jamais (ce qui fait qu'au final je vois les 2 se manifester dans la fenetre de sortie) j'en conclue que mon code ne parvient pas à effacer l'objet canvas devenu inutile.

    Lorsque je passe d'un canvas à l'autre, j'essaie de "tuer" le processus avec le code qui suit :

    t = null;


    J'espère que vous pourrez m'eclairer et je vous en remercie par avance !!

    bon code à vous.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 6
    Par défaut erreur dans le code inseré
    je repost car il y a une erreur dans le code que j'ai introduit : le "setCurrent" doit êtr fait avec le bon objet canvas en argument :


    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
    protected void startApp()
    {
      if (!started)
      {
        started = true;
        display = Display.getDisplay(this);
        exitCommand = new Command("Exit", Command.EXIT, 0 );
      }
     
      if (menu_mode)	// ce booleen permet d'identifier le canvas à utiliser
      {
        // Mode MENU
        System.out.println("Switching display to Menu...");
        game_canvas = null;	//censé "vider" l'objet canvas ?
        System.gc();
        menu_canvas = new MenuCanvas(this);	// l'objet canvas pour le menu
        display.setCurrent(menu_canvas);
      }
      else
      {
        // Mode race engine
        System.out.println("Switching display to race engine...");
        menu_canvas = null;
        System.gc();
        game_canvas = new GameCanvas(this);	// l'objet canvas pour le jeu
        display.setCurrent(game_canvas);
      }
     
        display.setCurrent(the_canvas);
     
    }

    désolé pour cette erreur

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 6
    Par défaut affaire suivante ...
    Finalement j'ai décidé d'utiliser un canvas unique pour gagner un peu de place (2 classes au lieu de 3) ce qui fait que je n'ai plus besoin de composer avec la classe thread dépréciée du J2ME ni besoin de décharger un canvas de la mémoire.
    je me demande pourquoi certains posts n'obtiennent aucune réponse, c'est hors de ma compréhension parfois. Merci quand même d'en avoir pris connaissance.

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

Discussions similaires

  1. [VB.NET 2.0] Destruction d'objet
    Par Torkan dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/06/2006, 02h02
  2. destruction d'objet
    Par goth dans le forum Langage
    Réponses: 8
    Dernier message: 19/03/2006, 15h52
  3. Destruction d'objet (.free) >> EAccessViolation
    Par monstroplante dans le forum Langage
    Réponses: 7
    Dernier message: 08/11/2005, 20h19
  4. destruction d'objets dans un vecteur
    Par titouille dans le forum C++
    Réponses: 12
    Dernier message: 28/07/2005, 19h20
  5. [débutante][Concept] Destruction d'objet, mode d'emploi?
    Par skea dans le forum Général Java
    Réponses: 4
    Dernier message: 12/06/2004, 21h48

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