Erreur dans ma JFrame première fenetre qui contient le main

[Résolu/Fermé]
Signaler
-
 gofagirl -
Bonjour,
J'ai une fenetre qui contient le main et qui est aussi la fenetre d'authentification qui permet à l'admin de se connecter.
J'ai l'erreur : The type FenPrincipal must implement the inherited abstract method ActionListener.actionPerformed(ActionEvent)
Je ne comprends vraiment pas pourquoi, et j'ai essayé de corriger l'erreur de differente manière, quelque chose m'échappe, et je suis débutante, pouvez vous m'aider svp.
Voici mon code de FenPrincipal:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.*;
import javax.swing.text.View;

import com.mysql.jdbc.PreparedStatement;
import java.sql.*;
import java.awt.Component;
import java.awt.Color;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.awt.Font;


public class FenPrincipal extends JFrame implements ActionListener {
 private static final long serialVersionUID = 1L;
 public static String titreFenetre = "( o _ o )  --[ Administrateur ]--  [ x _ x ]"; // titre de la fenetre
 public static Dimension tailleFenetre = new Dimension(400, 280); // taille de la fenetre
 public JButton btn;
 public JButton btn1;
 public Connexion c = new Connexion();
 public Connection conn;
    public  PreparedStatement statement = null; 
    static JTextField textField_pseudo, textField_mdp ;
    public ResultSet  resultat=null;
    public static String query_admin; 
 public static String login_admin; //variable prenant en compte les donnees de la colonne login_admin dans la BDD
 public static String mdp_admin; //variable prenant en compte les donnees de la colonne mdp_admin dans la BDD
 public String motDePasse; //variable dans lesquelles sont placées les requetes
    public JPanel black;
 
  public static void main(String[] args) {
  //Création d'une nouvelle fenetre
  FenPrincipal fen = new FenPrincipal();      
 }
 /**


* Constructeur

*/
 public FenPrincipal() {
  setBackground(Color.DARK_GRAY);
  setTitle(titreFenetre);
  setSize(tailleFenetre);
  setResizable(false);
  setLocationRelativeTo(null); // la fenetre apparait au milieu de l'ecran
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
  //Initialisation des JPanel
  JLabel lbl = new JLabel ();
  lbl.setText("Authentication de l'administrateur");
  JPanel haut = new JPanel();
  haut.setBackground(Color.WHITE);
  haut.add(lbl);
  getContentPane().add(BorderLayout.NORTH, haut);
  
  JPanel centre = new JPanel();
  centre.setBackground(Color.PINK);
  centre.setAlignmentX(Component.RIGHT_ALIGNMENT);
  centre.setAlignmentY(Component.BOTTOM_ALIGNMENT);
     centre.setLayout(null);
     JLabel login = new JLabel();
     login.setFont(new Font("Times New Roman", Font.PLAIN, 13));
     login.setBounds(10, 39, 100, 19);
     login.setText("LOGIN :");
     centre.add(login); 
     textField_pseudo.setBounds(127, 33, 200, 25);
     textField_pseudo.setPreferredSize(new Dimension(100, 20));
     centre.add(textField_pseudo); 
  
  
     JLabel mdp = new JLabel();
     mdp.setFont(new Font("Times New Roman", Font.PLAIN, 13));
     mdp.setBounds(10, 80, 107, 19);
     mdp.setText("MOT de PASSE :");
     centre.add(mdp); 
     textField_mdp.setBounds(127, 74, 200, 25);
     centre.add(textField_mdp);
     btn1 = new JButton("Quitter");
     btn1.setBounds(236, 110, 91, 30);
     centre.add(btn1);
     btn1.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    System.exit(0);
   }
  });
     getContentPane().add(BorderLayout.CENTER, centre);
  
     
     btn = new JButton("Connecter");
     btn.setBounds(127, 110, 91, 30);
     btn.setPreferredSize(new Dimension(150, 30));
     centre.add(btn);
     btn.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) 
   {  
         c.ConnexionBD();
         conn = c.getConnect();
    try {
         //Traitement
     Statement stmt_admin = (Statement) conn.createStatement(); 
     query_admin = ("SELECT login_admin, mdp_admin FROM admin");
         stmt_admin.executeQuery (query_admin);
         ResultSet rs_admin = stmt_admin.getResultSet();
  
            while (rs_admin.next())
            { 
             Connexion.dbUsername_admin = rs_admin.getString("login_admin");
                Connexion.dbPassword_admin = rs_admin.getString("mdp_admin");
         
            if (Connexion.dbUsername_admin.equals(Connexion.textField_pseudo.getText()) && Connexion.dbPassword_admin.equals(Connexion.textField_mdp.getText()))
           {
             Admin admin = new Admin();
             admin.setVisible(true);
           }
                  else{
                   Connexion.erreur_log = true;
                  }
                  Connexion.recherche_bdd = true;
               Connexion.erreur_log = false;
              }  } }}); 
 }
}



Et voici mon code de Connexion:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import javax.swing.JPasswordField;
import javax.swing.JTextField;


public class Connexion {
 public Connection conn; 
  public static boolean erreur_bdd = false;
  public static boolean recherche_bdd = false;
  public static String dbUsername_admin, dbPassword_admin;
  public static JTextField textField_pseudo; // création du champ pseudo
  public static JPasswordField textField_mdp; // création du cham mdp cypté
  public static boolean erreur_log = false;

    public void ConnexionBD(){
    //Chargement de la base de donnée
 try {
     
   Class.forName("com.mysql.jdbc.Driver");
   //Connection établi entre l'application et la base de donnée gestion_stock
      conn = DriverManager.getConnection("jdbc:mysql://localhost/gestion_stock","root","");
                System.out.println("Connexion à la base de données réussie"); 
          }
         catch(ClassNotFoundException err) {
                    System.out.println("\n Pilote non trouvé..");
                }
   catch(SQLException err) {
                    System.out.println("\n Connexion impossible");
                }
          }
    
    public Connection getConnect(){
        
        return conn;
    }
}



EDIT: Ajout de la coloration syntaxique.

1 réponse

Messages postés
16400
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2021
2 878
Bonjour,

Tu marques :

public class FenPrincipal
       extends JFrame
       implements ActionListener

Or si tu implémentes ActionListener, tu dois définir
void actionPerformed(ActionEvent e)
dans la liste de tes méthodes.

Dans ton cas, vu que tu gères déjà des actionPerformed dans des classes anonymes pour chaque bouton, tu peux carrément supprimer
implements ActionListener
puisque non utilisé par la suite.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42674 internautes nous ont dit merci ce mois-ci

Merci, merci j'avais supprimé l'affichage de la fenetre sans faire exprès,
maintenant ca se lance et la connexion à la base de donnée est réussie mais j'ai l'erreur :
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at gestion_stock.FenPrincipal$2.actionPerformed(FenPrincipal.java:119)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

A la ligne 119 j'ai :
			        	if (Connexion.dbUsername_admin.equals(Connexion.textField_pseudo.getText()) && Connexion.dbPassword_admin.equals(Connexion.textField_mdp.getText()))
Messages postés
16400
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2021
2 878
Il faut systématiquement vérifier les cas de nullité, tu ne peux pas faire confiance à ton code. Pas parce que c'est le tien, mais en général, il ne faut jamais prétendre savoir quoi que ce soit, il faut tout vérifier.

if (Connexion.dbUsername_admin==null)
    throw new IllegalStateException("Connexion.dbUsername_admin is null");
if (Connexion.textField_pseudo==null)
    throw new IllegalStateException("Connexion.textField_pseudo is null");
if (Connexion.dbPassword_admin==null)
    throw new IllegalStateException("Connexion.dbPassword_admin is null");
if (Connexion.textField_mdp==null)
    throw new IllegalStateException("Connexion.textField_mdp is null");

if (Connexion.dbUsername_admin.equals(Connexion.textField_pseudo.getText())
&& Connexion.dbPassword_admin.equals(Connexion.textField_mdp.getText()))
    // ...
D'accord j'ai fait ça mais j'ai encore une autre erreur :

Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Connexion.textField_pseudo is null
at gestion_stock.FenPrincipal$2.actionPerformed(FenPrincipal.java:121)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Messages postés
16400
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2021
2 878
Evidemment, ce que j'ai fait ne corriges pas l'erreur, mais au lieu d'avoir une exception vague "NullPointerException", ici on a un message beaucoup plus explicite : "Connexion.textField_pseudo is null"

Pareil que tout à l'heure, textField_pseudo vaut null car il n'est jamais initialisé, et même remarque, il n' a pas de raison d'être static (aucun composant Swing ne devrait jamais être static, sauf éventuellement les JFrame)
Merci Beaucoup pour ton aide! Bonne fin de journée! ^^