Methode statique erreur JAVA

Résolu/Fermé
didy_gwatinik Messages postés 352 Date d'inscription samedi 17 novembre 2007 Statut Membre Dernière intervention 30 mars 2010 - 5 mai 2009 à 11:04
didy_gwatinik Messages postés 352 Date d'inscription samedi 17 novembre 2007 Statut Membre Dernière intervention 30 mars 2010 - 5 mai 2009 à 12:17
Bonjour,
Je suis sur un projet de gestion de prêts en JAVA, je débute totalement!!
Je voudrai appeler une méthode de ma classe TabLivre mais cela ne marche pas, j'ai l'erreur suivante : Cannot make a static reference to the non-static method.Je n'ai aucune méthode statique hormis le main et ce n'est pas le main qui appelle ma méthode donc je ne comprends pas. Si quelqu'un pouvait m'aider, voilà mon code :
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if(source == Ajouter)
{
String ISBN, Titre, Auteur, Pages, Image, Category, Resume;
System.out.println("Ajouter un livre");
ISBN = ISBNT.getText();
Titre = TitreT.getText();
Auteur = AuteurT.getText();
Pages = PagesT.getText();
Category = PagesT.getText();
Resume = resumeT.getText();
Image = ImageT.getText();
Livre livre = new Livre(ISBN, Titre, Auteur, Pages, Category, Resume, Image);
TabLivre.ajouter(livre); //renvoie l'erreur
}
}
A voir également:

2 réponses

sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
5 mai 2009 à 12:02
Salut,
TabLivre.ajouter(livre)
serait approprié si et seulement si la méthode ajouter était statique dans la classe TabLivre (ce n'est probablement pas le cas). Le fragment de code exposé ne me permet pas de voir la définition de TabLivre, mais tu devrais peut-être faire qqchose du genre
TabLivre tabLivre = new TabLivre();
tabLivre.ajouter(livre);
Il est aussi bien de respecter les conventions de nommage Java (première lettre majuscule pour le nom d'une classe et minuscule pour une instance).

++
0
didy_gwatinik Messages postés 352 Date d'inscription samedi 17 novembre 2007 Statut Membre Dernière intervention 30 mars 2010 80
5 mai 2009 à 12:06
Oui, en effet, je n'ai plus d'erreur comme ça: merci! Le problème est qu'à chaque appel de ma méthode, le constructeur va être appelé et tout ce que j'ai dans mon tableau va disparaitre, comment faire ? Voilà ma classe TabLivre :
public class TabLivre {
Livre monTabLivre[] = new Livre[20];
int nb;

public TabLivre(){
nb = 0;
}

public int getNb() {
return nb;
}

public void setNb(int nb) {
this.nb = nb;
}

public void ajouter(Livre monLivre){
//contenu
}

public Livre affiche(int i){
//contenu
}

public Livre afficheTout(int i){
//contenu
}

public void supprimer(String ISBN){
//contenu
}

public void modifier(String ISBN){
//contenu
}
}
0
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
5 mai 2009 à 12:16
Ben dans ton programme tu conserves une variable avec l'instance de TabLivre et tu n'appeleras le constructeur qu'une seule fois.

Tu peux éventuellement créer une méthode
TabLivre getTabLivre() {
  if (tabLivre == null) {
    tabLivre = new TabLivre();
  }
  return tabLivre;
}
et déclarer tabLivre en tant que membre ailleurs (dans la classe contenant ton main(), par exemple). Par la suite, tu n'accèdes plus jamais tabLivre directement, mais uniquement via l'accesseur (la méthode get).

++
0
didy_gwatinik Messages postés 352 Date d'inscription samedi 17 novembre 2007 Statut Membre Dernière intervention 30 mars 2010 80
5 mai 2009 à 12:17
Ah oui oui oui trés bonne idée Merci beaucoup!!
0