pb avec void init et BDD

scyon75
pb avec void init et BDD

Alors voilà. Je veux réaliser un applet faisant appel à plusieurs classes.
Mon but est de faire une map.
J'ai une première classe nommée AppletJeu dans laquelle il y a un init(). Elle fait appel à la classe carte.class. Et c'est justement avec celle ci que j'ai des problemes. Je voudrais faire une connexion à mysql, récuperer une valeur pour l'attribut "M", et selon qu'il vaut 1 ou 2, afficher deux map différentes. Mais voilà, si je mets un init() dans cette classe, l'applet m'affiche un carré blanc, comme si il n'avait pas attribué de valeur à mon cases[][] qui defini ma map. Et quand j'enlève ce init(), impossible de me connecter à la BDD... Je vous mets mon code, si quelqu'un peut m'aider, ça serait gentil... Merci O dieux du java...

import java.sql.*;
import java.awt.Image;

/**
* Cette classe représente la carte de jeu
*/
public class Carte {
private int cases [][];
public void init(){
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/testi","root","");


Statement st = connection.createStatement();

ResultSet rs = st.executeQuery(
"SELECT * FROM perso WHERE pseudo =\"edin\""
);

if (rs.getInt("M")==1){
int cases[][] = {
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,2,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{1,0,0,1,1,2,1,0,1,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,0,2,1,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,0,2,1,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,1,2,1,0,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,1,0,0,0,2,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0}};
this.cases = cases;
}


if (rs.getInt("M")==2){
int cases [][] ={
{2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,1,1,0,0,1,0,0,0,0,2,0,2,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,2,1,0,0,1,0,1,0,2,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,2,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,2,0,1,0,2,0,0,0,2,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,2,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{1,0,0,1,1,2,1,0,1,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,0,2,1,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,0,2,1,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,1,2,1,0,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,2,0,0,0,0,2,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,1,0,0,0,2,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0}};
this.cases = cases;}

else{
int cases [][] ={
{2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,1,1,0,0,1,0,0,0,0,2,0,2,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,2,1,0,0,1,0,1,0,2,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,2,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,2,0,1,0,2,0,0,0,2,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,2,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,2,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{1,0,0,1,2,2,1,0,1,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,2,2,1,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,2,2,1,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,2,2,1,0,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,2,2,0,0,0,0,0,2,0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,2,2,0,0,0,0,2,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,1,1,1,2,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0},
{1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,1,0,0,0,2,0,0,0,0,0},
{1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,1,2,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0}};
this.cases = cases;}

rs.close(); // Fermeture
st.close();


connection.close();
} catch(Exception e) {
System.out.println("Erreur au chargement du driver : " + e.toString());
}
}
// Cette variable définit la carte de jeu : elle indique le type de chacune des 20x20 cases.
// Dans notre programme, le type 0 correspond à un carré d'herbe, et le type 1 correspond à un rocher

// ce tableau indique que les cases de type 0 sont praticables, et pas celles de type 1
private boolean terrainsPratiquables[] = {true, false, true};

// ce tableau contiendra les images rattachées aux types de case 0 et 1
private Image imagesTerrains[] = new Image[3];

/* Constructeur */
public Carte(Image terrain0, Image terrain1, Image terrain2) {
imagesTerrains[0] = terrain0; // pour les cases de type 0, on affichera l'image terrain0 (herbe)
imagesTerrains[1] = terrain1;
imagesTerrains[2] = terrain2;// pour les cases de type 1, on affichera l'image terrain1 (rocher)
}

/* Sert à vérifier que la case dont les coordonnées sont en paramètres, est accessible */
public boolean casePratiquable(int caseX, int caseY) {
// on vérifie que l'emplacement n'est pas en dehors des limites de la carte
if (caseX < 0 || caseX >=30 || caseY < 0 || caseY >=30) {
return false;
// puis on regarde dans le modèle si l'emplacement est pratiquable ou non
} else if(!terrainsPratiquables[cases[caseY][caseX]]) {
return false; // s'il ne l'est pas, on retourne false
// si c'est OK, on retourne true
} else {
return true;
}
}

/* Methodes get et set */

public int[][] getCases() {
return cases;
}

public boolean[] getTerrainsPratiquables() {
return terrainsPratiquables;
}

public Image[] getImagesTerrains() {
return imagesTerrains;
}

public void setcases(int[][] _cases) {
cases = _cases;
}

public void setTerrainsPratiquables(boolean[] _terrainsPratiquables) {
terrainsPratiquables = _terrainsPratiquables;
}

public void setImagesTerrains (Image[] _imagesTerrains) {
imagesTerrains = _imagesTerrains;
}

}

fredericmazue

Quote:
J'ai une première classe nommée AppletJeu dans laquelle il y a un init().

Jusque là ça semble correct :)

Quote:
Elle fait appel à la classe carte.class

Pourquoi pas. Mais que veut dire exactement "faire appel" ?

Pourquoi mettre une méthode init() dans la classe carte ?
Pas de raison
Le nom init semble indiquer que tu n'as pas bien compris comment est constituée une applet.

Quote:
Et quand j'enlève ce init(), impossible de me connecter à la BDD...

Et pourquoi ça ?

Bon tu veux faire une applet. C'est à dire une classe qui étend Applet ou JApplet. C'est cette classe, AppletJeu si j'ai bien compris, qui doit avoir une méthode init. Pas les autres classes.
Tu n'as aucune raison de mettre une méthode init dans Carte. Simplement dans cette classe tu écris une méthode sous un nom quelconque, par exemple getMap et dans la méthode init de AppletJeu, tu instancie ta classe Carte et tu appelles la méthode gteMap

dans AppletJeu:

public void init()
{
  Carte carte = new Carte();
  carte.getMap();
  // etc
}

Quote:
Merci O dieux du java...

Tu as bien raison, Java est odieux :lol:
scyon75
oui

j'ai mis init() dans ma classe carte car sans ça, il me mettait des erreur à la compilation. quand je disais fait appel à, je voulais dire, utilise le constructeur, enfin c t une facon de dire que je savais qu'il ne fallait pas de init() mais je ne savais pas trop comment faire differemment... je vais essayer avec ton getMap... je te tien u courant... merci

scyon75
aie aie aie

Bon, tu vas surement dire que je comprend rien, mais voila, j'avais deja crré une map dans AppletJeu, donc g mis le getMap jsute apres... Il me met "non static method getMap() canot be referenced from a static context". Mais que diable veut dire cete phrase? ... voila le code de AppletJeu si ca peut vous aider a comprendre, et donc m'aider moi...

import java.awt.Color;
import java.awt.Image;
import java.awt.Container;
import java.awt.MediaTracker;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import javax.swing.*;
import java.net.URL;
import java.awt.*;
import java.applet.*;

/**
* Cette classe est l'applet, c'est le point d'entrée du jeu. C'est elle qui prend
* en compte les actions du joueur : selon les touches sur lesquelles il appuie,
* cette classe appelle des méthodes du Modèle (classe ModelJeu).
* Cette classe est le Contrôleur dans l'architecture MVC (Modèle-Vue-Contrôleur)
*/
public class AppletJeu extends JApplet implements MouseListener {
// déclaration des variables de classe
private AffichageJeu affichage; // gèrera l'affichage du jeu
private ModeleJeu modele; // gèrera les données et traitements du jeu
private MediaTracker surveillantImages; // servira à vérifier que toutes les images ont bien été chargées par l'applet
int XSouris,YSouris;
private int deplacementX, deplacementY;
/* Initialise l'applet. Cette fonction est automatiquement appelée lors du chargement de l'applet */
public void init() {

surveillantImages = new MediaTracker(this);
// instanciation du modèle
modele = new ModeleJeu();
// on rajoute le joueur dans le modèle
Image joueurImage = getImage(getCodeBase(), "Images/tete.gif");
// getCodeBase() renvoie le chemin du dossier contenant les classes
surveillantImages.addImage(joueurImage, 0);
modele.setJoueur(new Joueur(9,9, joueurImage));
// on rajoute la carte dans le modèle
Image herbeImage = getImage(getCodeBase(), "Images/herbe.gif");
Image rocherImage = getImage(getCodeBase(), "Images/rocher.gif");
Image routedroite = getImage(getCodeBase(), "Images/routedroite.gif");
surveillantImages.addImage(herbeImage, 1);
surveillantImages.addImage(rocherImage, 2);
surveillantImages.addImage(routedroite,3);

modele.setCarte(new Carte(herbeImage, rocherImage, routedroite));
Carte.getMap();
// instanciation de l'affichage
affichage = new AffichageJeu(modele);

modele.setAffichage(affichage);
getContentPane().add(affichage);// on rajoute l'objet "affichage" au conteneur de composants graphiques de l'applet.
// on attend que toutes les images aient bien été chargées avant de continuer
//getContentPane().add(salut);
try {
surveillantImages.waitForAll();
} catch (InterruptedException e) {
return;
}
//ajout d'un écouteur de souris
addMouseListener(this);
}


public void mouseClicked(MouseEvent e)
{

//salut.setText("bnjouterr");

XSouris = e.getX(); //obtient la coordonnée en X
YSouris = e.getY(); // obtient celle en Y
//deplacementX = 20*XSouris;
//deplacementY = 20*YSouris;
modele.deplacerJoueur(XSouris/20, YSouris/20); //transmet les coordonnées à deplacerJoueur dans ModeleJeu.

}






public void mousePressed(MouseEvent evt){}
public void mouseReleased(MouseEvent evt){}
public void mouseEntered(MouseEvent evt){}
public void mouseExited(MouseEvent evt){}

/* Cette fonction se déclenche lorsqu'une touche du clavier est enfoncée. */
}

fredericmazue

Quote:
Bon, tu vas surement dire que je comprend rien

Oui...

Quote:
j'avais deja crré une map

Non :!: :!:

Quote:
Il me met "non static method getMap() canot be referenced from a static context". Mais que diable veut dire cete phrase?

Que tu ne comprends rien et surtout (c'est là que c'est grave) que tu ne fais pas ce qu'on te dit.

Je t'ai dit:

Carte carte = new Carte();
carte.getMap()

Tu le faisais et ça marchait au lieu de cela tu fais:

Quote:
modele.setCarte(new Carte(herbeImage, rocherImage, routedroite));

Là tu crées certes une carte MAIS la référence sur l'objet créé n'est pas conservée et tu ne peux pas t'en servir. La carte que tu crées ne sert qu'à la classe modèle qui reçoit la référence. Cette référence est invisible dans le code qui suit la ligne.

Quote:
Carte.getMap();

Et là Carte n'est pas une référence (forcément, y en a pas, de référence) mais un nom de classe. En Java une classe n'est pas un objet. Si tu appelles une méthode d'une classe, cette méthode doit *obligatoirement* être static, et le compilateur a raison de te jeter. Tiens même que moi à sa place, je t'aurais collé mille balles d'amende :)

Donc si tu avais fait comme je t'ai dit (en adaptant pour ton cas), cela donnait

Carte carte = new Carte(herbeImage, rocherImage, routedroite);
modele.setCarte(carte);
carte.getMap();

Note bien carte.getMap() et non Carte.getMap()

Parce que là carte est une référence sur un *objet* créé par new.
Classe et objet ce n'est pas synonyme.

scyon75

Ben en vrai, j'y arrive pas vraiment. Un ami m'a dit que ça venat du fait qu'il fallait que je definisse cases dynamiquement avec une boucle imbriquée et une methode qui lirait dans un fichier... Ca serait l'ideal c vrai mais bon... je crois que j'ai encore pass mal de progres à faire...

fredericmazue

Quote:
Ben en vrai, j'y arrive pas vraiment

Qu'est-ce que tu racontes la ??
Pour le problème que tu as posé, tu as la solution. Sûr et certain.
La question c'était d'acc'der à une méthode de ta classe Carte.

Quote:
Un ami m'a dit que ça venat du fait qu'il fallait que je definisse cases dynamiquement

Maintenant tu sembles dire que ta carte ne se crée pas aussi bien que tu le souhaites. Ton ami a sans doute raison, mais c'est une autre question ça.
Pour une autre question, merci de poser ... une autre question.
Pour éviter que la discussion ne soit incompréhensible à ceux qui ne l'ont pas suivi dès le début.