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

Problème de MVC!


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 12
    Par défaut Problème de MVC!
    Bonjour, je dois créer une application en JAVA qui permet de gérer une bibliothéque de DVD selon la méthode MVC....jusqu'ici tout va bien sauf que j'ai un problème dans mes évènements, j'ai cette erreur récurrente :
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at controleurs.ControleurButtonRechercher.actionPerformed(ControleurButtonRechercher.java:27)
    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.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)
    le code de mon listener est le suivant :
    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
    32
    33
    34
    35
    package controleurs;
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.AbstractButton;
     
    import vues.InterfaceVue;
    import vues.VueMAJ;
     
    import modeles.Modele;
    import modeles.ModeleMAJ;
     
    public class ControleurButtonRechercher implements ActionListener{
     
    	ModeleMAJ m;
    	VueMAJ vue;
    	AbstractButton widget;
     
    	public ControleurButtonRechercher(AbstractButton b) {
     
    		widget = b;
     
    		}
    		public void actionPerformed(ActionEvent e) {
     
    			m.RechercherFilm(vue.textchamp.getText());
    			vue.textTitre.setText(m._titre);
    			vue.textRealisateur.setText(m._rea);
    			vue.textGenre.setText(m._genre);
    			vue.textActeur1.setText(m._acteur);
     
    		}
     
    }
    celui de ma vue :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    package vues;
     
    import java.awt.*;
    import java.awt.event.ActionListener;
     
    import javax.swing.*;
     
    import modeles.Modele;
     
    import controleurs.ControleurButtonModifier;
    import controleurs.ControleurButtonRechercher;
     
    public class VueMAJ implements InterfaceVue{
     
    	//ControleurButtonRechercher _ctrl ;
    	Modele _mod;
     
    	JFrame frame=new JFrame("Mise à jour d'un film");
    	JPanel pnlAll = new JPanel();
    	JLabel lblTitle = new JLabel("Mise à jour d'un film :");
    	JPanel pnlRecherche = new JPanel();
     
    	JLabel lblTitle2 = new JLabel("Recherche d'un film :");
    	JLabel lblchamp = new JLabel("Film à rechercher :");
    	public JTextArea textchamp = new JTextArea ();
     
    	JButton btnRech = new JButton("Rechercher");
    	ControleurButtonRechercher ctrl = new ControleurButtonRechercher(btnRech);
     
    	JPanel pnlModif = new JPanel();
     
    	JLabel lblChampTitre = new JLabel("Titre du film");
    	public JTextArea textTitre = new JTextArea ();
     
    	JLabel lblChampRealisateur = new JLabel("Realisateur du film");
    	public JTextArea textRealisateur = new JTextArea ();
     
    	JLabel lblChampGenre = new JLabel("Genre du film");
    	public JTextArea textGenre = new JTextArea ();
     
    	JLabel lblChampActeur1 = new JLabel("Acteur1 du film");
    	public JTextArea textActeur1 = new JTextArea ();
     
    	JLabel lblChampActeur2 = new JLabel("Acteur2 du film");
    	JTextArea textActeur2 = new JTextArea ();
     
    	JLabel lblChampActeur3 = new JLabel("Acteur3 du film");
    	JTextArea textActeur3 = new JTextArea ();
     
    	JButton btnModif = new JButton("Modifier");
    	ControleurButtonModifier ctrl2 = new ControleurButtonModifier(btnModif);
     
    	public VueMAJ(){
     
    		frame.setLayout(new FlowLayout());
     
     
    		pnlAll.setLayout(new BorderLayout(10,10));
     
    		pnlAll.add(lblTitle);
    		frame.add(pnlAll);
     
     
    		pnlRecherche.setLayout(new BorderLayout(5,5));
    		pnlAll.add(pnlRecherche,BorderLayout.NORTH);
     
     
    		btnRech.addActionListener(ctrl);
     
    		pnlRecherche.add(lblTitle2,BorderLayout.NORTH);
    		pnlRecherche.add(lblchamp,BorderLayout.WEST);
    		pnlRecherche.add(textchamp);
    		pnlRecherche.add(btnRech,BorderLayout.SOUTH);
     
     
     
    		pnlModif.setLayout(new GridLayout(7,2,10,10));
    		pnlAll.add(pnlModif,BorderLayout.SOUTH);
     
     
     
    		pnlModif.add(lblChampTitre);
    		pnlModif.add(textTitre);
    		pnlModif.add(lblChampRealisateur);
    		pnlModif.add(textRealisateur);
    		pnlModif.add(lblChampGenre);
    		pnlModif.add(textGenre);
    		pnlModif.add(lblChampActeur1);
    		pnlModif.add(textActeur1);
    		pnlModif.add(lblChampActeur2);
    		pnlModif.add(textActeur2);
    		pnlModif.add(lblChampActeur3);
    		pnlModif.add(textActeur3);
    		pnlModif.add(btnModif);
     
     
    		btnModif.addActionListener(ctrl2);
     
    		frame.pack();
    		//On quitte l'application quand la fenêtre est fermée
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		//Affichage de la fenêtre
    		frame.setVisible(true);
     
    	}
     
    	public static void main(String[] args){
     
    		VueMAJ vue =new VueMAJ();
     
    	}
    }
    et celui de mon modele :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    package modeles;
     
    import java.sql.*;
     
     
    public class ModeleMAJ implements Modele{
     
    	private Connection maConnection;
    	public String _titre;
    	public String _rea;
    	public String _genre;
    	public String _acteur;
     
    	public void OpenConnection(String url){
    		try {
    			Class.forName("oracle.jdbc.driver.OracleDriver");
    			maConnection=DriverManager.getConnection(url);
    			}
    			catch (SQLException e){
    				System.err.println("Impossible connection");
    				return;
    			}
    			catch (Exception e){
    			System.err.println("Impossible de charger le driver");
    			return;
    			}
    	}
     
    	public void CloseConnection(){
    		try {
    			maConnection.close() ;
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
    	}
     
    	public void RechercherFilm(String t){
     
    		try {
    			Statement monInstruction = maConnection.createStatement();
    			ResultSet monResultat = monInstruction.executeQuery("SELECT * FROM Film F, Acteur A, Individu I, Genre G WHERE NumFilm.F =NumFilm.G AND NumFilm.F = NumFilm.A AND NumIndividu.A = NumIndividu.I AND Titre = "+t);
     
    			if(monResultat == null){
    				ResultSet monResultat2 = monInstruction.executeQuery("SELECT * FROM NvFilm F, NvActeur A, NvIndividu I, NvGenre G WHERE NumFilm.F =NumFilm.G AND NumFilm.F = NumFilm.A AND NumIndividu.A = NumIndividu.I AND Titre = "+t);
     
    				if(monResultat2 == null){
    					_titre="rien trouve";
    					_genre="rien trouve";
    					_rea="rien trouve";
    					_acteur="rien trouve";
    				}
    				else{
    					_titre=monResultat2.getString("Titre");
    					_rea=monResultat2.getString("Realisateur");
    					_genre=monResultat2.getString("CodeGenre");
    					_acteur=monResultat2.getString("NomIndividu");
    				}
    			}
    			else{
    				_titre=monResultat.getString("Titre");
    				_rea=monResultat.getString("Realisateur");
    				_genre=monResultat.getString("CodeGenre");
    				_acteur=monResultat.getString("NomIndividu");
    			}
     
     
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
     
    	}
    si quelqu'un a un peu de temps pour aider un débutant en MVC comme moi ce serait cool! merci

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    m est null, ce qui est normal puisque tu ne lui attribue jamais de valeur.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 12
    Par défaut
    hum hum......je vois mais je ne sais pas comment faire la...

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ben attribue lui une valeur d'une manière ou d'une autre, le compilateur aussi bien que moi ne peux pas deviner ce que tu veux aller stocker là dedans.

  5. #5
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Tu a 3 attributs de ta classe [m,vue,widget]
    Dans le constructeur de ta classe il faut INITIALISER les attributs.
    Si tu ne les initialisent pas, il sont à null par défault.
    Donc c'est normal que le compilateur d'envoi un joli java.lang.NullPointerException

    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
    public class ControleurButtonRechercher implements ActionListener{
     
    	ModeleMAJ m;
    	VueMAJ vue;
    	AbstractButton widget;
     
    	public ControleurButtonRechercher(AbstractButton b) {
     
    		m = new ModeleMAJ();
    		vue = new VueMAJ();
    		widget = b;
     
    		}
    		public void actionPerformed(ActionEvent e) {
     
    			m.RechercherFilm(vue.textchamp.getText());
    			vue.textTitre.setText(m._titre);
    			vue.textRealisateur.setText(m._rea);
    			vue.textGenre.setText(m._genre);
    			vue.textActeur1.setText(m._acteur);
     
    		}
     
    }

  6. #6
    Membre éprouvé
    Inscrit en
    Juin 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 189
    Par défaut
    A noter que tu mets à jour les Jlabel etc. dans ton contrôleur. Ca ne me semble pas trop MVC de faire comme ça. C'est à la vue de mettre à jour ses composants (via une notification qui peut provenir d'ailleurs, en particulier du modèle)

Discussions similaires

  1. [Spring MVC] Problème d'encoding
    Par aloha dans le forum Spring Web
    Réponses: 6
    Dernier message: 22/11/2010, 14h56
  2. Problème conception mvc
    Par j2ee60 dans le forum JSF
    Réponses: 4
    Dernier message: 16/08/2010, 16h37
  3. Problème conception MVC
    Par tiboo dans le forum C++
    Réponses: 6
    Dernier message: 15/01/2008, 21h08
  4. [Smarty] Problème Smarty MVC
    Par mnr_nfo dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 27/04/2007, 16h14
  5. Problème avec MVC
    Par Yoteco dans le forum MVC
    Réponses: 23
    Dernier message: 15/03/2007, 19h42

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