Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Java] Problème d'instanciation

Je comprends pas... Oo

    13 novembre 2007 à 21:20:22

    Bonjour à tous,

    Je développe un Applet représentant un jeu très connu : le Taquin (vous savez, le jeu où on a un une grille, les pièces de celle-ci sont mélangées, et il faut les remettre dans l'ordre).

    Pour cela, j'ai trois classes : la classe Taquin qui exécutte les traitements (l'Applet en lui-même quoi), la classe Grid qui est une grille, et la classe Piece qui représente la cellule d'une grille.
    Ma Grid contient donc des Piece ; mais petit problème, il refuse d'instancier un objet de la classe Piece ! o_O
    Et je ne comprends pas du tout...

    Bref, voici mon code. Si vous pouviez m'aider, cela me retirerait une épine du pied :)

    1. import java.awt.*;
    2. import java.awt.image.*;
    3. import java.Applet.*;
    4. public class Piece extends Applet {
    5.         private static final long serialVersionUID = 1L;
    6.         public final static int CEILS_NUMBER = 6;
    7.         public final static int CEILS_WIDTH = 75;       
    8.         public Point area; // witch fragment is it ?
    9.         // image components
    10.         public Image source;
    11.         public Image image;
    12.         public ImageProducer producer;
    13.         public ImageFilter filter;
    14.         public Piece(int line, int column) {
    15.                 this.area = new Point(line, column);   
    16.                 this.source = getImage(getCodeBase(), "grid.png");
    17.         }
    18.         public void paint(Graphics g) {
    19.                 // cutting of the image
    20.                 this.producer = this.source.getSource();       
    21.                 this.filter = new CropImageFilter(area.x + 1 + (area.x * CEILS_WIDTH) , area.y + 1 + (area.y * CEILS_WIDTH), CEILS_WIDTH, CEILS_WIDTH);
    22.                 this.image = createImage(new FilteredImageSource(this.producer, this.filter))
    23.                 g.drawImage(image, area.x + 1 + (area.x * CEILS_WIDTH) , area.y + 1 + (area.y * CEILS_WIDTH), this);
    24.         }       
    25. }
    26. public class Grid {
    27.         public Point origin;
    28.         public Piece pieces[][];
    29.         public final static int CEILS_NUMBER = 6;
    30.         public final static int CEILS_WIDTH = 75;
    31.         public Grid() {
    32.                 this.origin = new Point(0, 0);
    33.                 for (int i = 0; i < CEILS_NUMBER; i++)
    34.                         for (int j = 0; j < CEILS_NUMBER; j++)
    35.                                 this.pieces[i][j] = new Piece(i, j);
    36.         }
    37.         public void paint(Graphics g) {
    38.                 for (int i=0; i<=CEILS_NUMBER; i++)
    39.                         // paint the columns of the grid
    40.                         g.drawLine(this.origin.x + (i * CEILS_WIDTH), this.origin.y, this.origin.x + (i * CEILS_WIDTH), this.origin.y + (CEILS_NUMBER * CEILS_WIDTH));
    41.                 for (int i=0; i<=CEILS_NUMBER; i++)
    42.                         // paint the lines of the grid
    43.                         g.drawLine(this.origin.x, this.origin.y + (i * CEILS_WIDTH), this.origin.x + (CEILS_NUMBER * CEILS_WIDTH), this.origin.y + (i * CEILS_WIDTH));
    44.                 for (int i = 0; i < CEILS_NUMBER; i++)
    45.                         for (int j = 0; j < CEILS_NUMBER; j++)
    46.                                 // paint all the pieces of the game
    47.                                 this.pieces[i][j].paint(g);
    48.         }       
    49. }
    50. public class Taquin extends Applet {
    51.         private static final long serialVersionUID = 1L;
    52.         public Grid grid;       
    53.         public void init() {
    54.                 this.grid = new Grid();
    55.                 this.setSize(450, 450)
    56.         }
    57.         public void paint(Graphics g) {
    58.                 grid.paint(g);
    59.         }
    60. }


    Je vous remercie d'avance pour vos réponses en espérant que vous détecterez la source de mon problème.

    A bientôt ! :)
    • Partager sur Facebook
    • Partager sur Twitter
      13 novembre 2007 à 22:18:51

      C'est normal le "class Piece extends Applet" ?
      • Partager sur Facebook
      • Partager sur Twitter
        13 novembre 2007 à 22:20:32

        C'est pour pouvoir utiliser la méthode getImage(getCodeBase(), "grid.png"); ; si je ne fais pas l'héritage, il ne connait pas getCodeBase()...

        Edit : Après avoir cherché un peu, il semblerait que la méthode getCodeBase() contienne l'environnement de l'Applet qui l'appelle. En conséquence, j'ai changé mes constructeurs pour que l'Applet arrive en paramètre dans ma classe Piece, et en modifiant comme il fallait.
        Mais j'ai toujours ce problème de pointeur qui retourne une exception...

        Une idée ?
        • Partager sur Facebook
        • Partager sur Twitter
          14 novembre 2007 à 19:37:50

          Bonjour, je m'y connais très peu en Java (à vrai dire je commence seulement à m'intéresser à ce langage) mais ne devrais-tu pas mettre le constructeur de Applet (super()) dans le constructeur de ta classe Piece ?

          Je ne sais pas si c'est de là que vient le problème, mais c'est peut-être une autre erreur (ou oubli).
          • Partager sur Facebook
          • Partager sur Twitter
            14 novembre 2007 à 21:42:01

            Hum non car Piece héritait d'Applet juste pour bénéficier de sa méthode getCodeBase();. Aucun de ses attributs ne m'intéresse, voilà pourquoi je ne procède pas à une telle construction...
            Merci quand même d'avoir tenté... :D

            Quelqu'un aurait une autre idée ?
            • Partager sur Facebook
            • Partager sur Twitter
              23 novembre 2007 à 10:34:10

              Salut! déja rajoutte ca dans ta méthode public grid()
              1. pieces=new Piece[CEILS_NUMBER][CEILS_WIDTH];

              Ca t'enlèvera un premier problème de null pointer exception, ensuite reste à savoir si tu as placé correctement ton image grid.png sinon si il ne le trouve pas c'est de la que provient un nouveau null pointer exception!
              Voila :)
              • Partager sur Facebook
              • Partager sur Twitter
                24 novembre 2007 à 10:14:30

                Je pense que la pseudovariable this ne devrait pas se trouver autant de fois dans le corps de tes méthodes, et pas non plus dans les constructeurs. Essayes en mettant les variables d'instance, c'est peut être pas ça mais ça me dit rien de bon.
                • Partager sur Facebook
                • Partager sur Twitter

                [Java] Problème d'instanciation

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown