Problème Exception in thread "main" java.lang

Fermé
heithemnacer Messages postés 11 Date d'inscription jeudi 24 février 2011 Statut Membre Dernière intervention 3 décembre 2012 - 10 mars 2012 à 18:30
heithemnacer Messages postés 11 Date d'inscription jeudi 24 février 2011 Statut Membre Dernière intervention 3 décembre 2012 - 12 mars 2012 à 18:48
Salut à tous,

svp aider moi c'est urgent j'ai rencontré un problème dans mon projet de fin d'etude (je travaille avec Eclipse)

voila l'erreur:Exception in thread "main" java.lang.NullPointerException
at design3d.swing.PanneauLogement.<init>(PanneauLogement.java:25)

et voila la classe où se declenche l'erreur :




package design3d.swing;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.util.ResourceBundle;
import javax.swing.*;

import design3d.modele.*;

public class PanneauLogement extends JRootPane {

//Enumération des clés d?accès aux actions disponibles sur la vue.
public enum ActionType {UNDO, REDO, ADD_MEUBLE_LOGEMENT, DELETE_MEUBLE_LOGEMENT, DELETE, CREATE_WALLS}

private ResourceBundle resource;
private JToggleButton.ToggleButtonModel selectToggleModel;
private JToggleButton.ToggleButtonModel createWallsToggleModel;

public PanneauLogement(Logement logement, PreferencesUtilisateur preferences, ControleurLogement controleur) {

//Lecture du fichier de propriétés des actions.
this.resource = ResourceBundle.getBundle(PanneauLogement.class.getName());

this.selectToggleModel = new JToggleButton.ToggleButtonModel();
this.selectToggleModel.setSelected(controleur.getControleurPlan().getMode() == ControleurPlan.Mode.SELECTION);
this.createWallsToggleModel = new JToggleButton.ToggleButtonModel();
this.createWallsToggleModel.setSelected(controleur.getControleurPlan().getMode() == ControleurPlan.Mode.WALL_CREATION);

JPopupMenu.setDefaultLightWeightPopupEnabled(false);
ToolTipManager.sharedInstance().setLightWeightPopupEnabled(false);

//Créations des actions de la vue.
createActions(controleur);

//Modification de la barre de menus.
setJMenuBar(getLogementMenuBar());

//Ajout de la barre d?outils et des panneaux à la vue.
getContentPane().add(getToolBar(), BorderLayout.NORTH);
getContentPane().add(getPanneauMeubleCatalogue(controleur));
getContentPane().add(getMainPane(logement, controleur));
}

//Crée les actions associées à cette vue, à partir des propriétés en ressource.
private void createActions(final ControleurLogement controleur) {

createAction(ActionType.UNDO,controleur, "undo");
createAction(ActionType.REDO, controleur, "redo");
createAction(ActionType.ADD_MEUBLE_LOGEMENT, controleur, "ajouterMeubleLogement");
createAction(ActionType.DELETE_MEUBLE_LOGEMENT, controleur.getControleurMeuble(), "effacerSelection");
}

private void createAction(ActionType action, Object controleur, String methode) {
try {
getActionMap().put(action, new ControleurAction(this.resource, action.toString(), controleur, methode));
}
catch (NoSuchMethodException ex) {
throw new RuntimeException(ex);
}
}

//Renvoie la barre de menus associée à cette vue.
private JMenuBar getLogementMenuBar() {
ActionMap actions = getActionMap();

//Création du menu Edition à partir de sa pseudo-action associée.
JMenu editMenu = new JMenu(new ResourceAction(this.resource, "EDIT_MENU"));
editMenu.setEnabled(true);

//Ajout des éléments du menu Edition configurés à partir de leur action.
editMenu.add(actions.get(ActionType.UNDO));
editMenu.add(actions.get(ActionType.REDO));

//Création du menu Meubles.
JMenu meubleMenu = new JMenu(new ResourceAction(this.resource, "FURNITURE_MENU"));
meubleMenu.setEnabled(true);

//Ajout des éléments du menu Meubles configurés à partir de leur action.
meubleMenu.add(actions.get(ActionType.ADD_MEUBLE_LOGEMENT));
meubleMenu.add(actions.get(ActionType.DELETE_MEUBLE_LOGEMENT));

//Création de la barre de menus avec les menus Edition, Meubles et Plan.
JMenuBar menuBar = new JMenuBar();
menuBar.add(editMenu);
menuBar.add(meubleMenu);

return menuBar;
}
//Renvoie la barre d?outils associée à cette vue.
private JToolBar getToolBar() {
JToolBar toolBar = new JToolBar();
ActionMap actions = getActionMap();

//Ajout des boutons à la barre d?outils dont les icônes et les listeners sont configurés à partir des actions associées à cette vue.
toolBar.add(actions.get(ActionType.ADD_MEUBLE_LOGEMENT));
toolBar.add(actions.get(ActionType.DELETE_MEUBLE_LOGEMENT));
toolBar.addSeparator();
toolBar.add(actions.get(ActionType.UNDO));
toolBar.add(actions.get(ActionType.REDO));
return toolBar;
}

//Active ou désactive l?action qui correspond à la clé actionType.
public void setEnabled(ActionType actionType, boolean enabled) {
getActionMap().get(actionType).setEnabled(enabled);
}

//Modifie le texte et la description courte des actions Annuler/Refaire.
public void setUndoRedoName(String undoText, String redoText) {
setNameAndShortDescription(ActionType.UNDO, undoText);
setNameAndShortDescription(ActionType.REDO, redoText);
}

private JComponent getPanneauMeubleCatalogue(ControleurLogement controleur) {

//Récupération des vues de l?arbre du catalogue et du tableau des meubles.
JComponent vueCatalogue = controleur.getControleurCatalogue().getVue();
JComponent vueMeuble = controleur.getControleurMeuble().getVue();

//Création d?un panneau partagé qui visualise les deux vues dans des panneaux à ascenseurs.
JSplitPane panneauMeubleCatalogue =new JSplitPane(JSplitPane.VERTICAL_SPLIT, new JScrollPane(vueCatalogue), new JScrollPane(vueMeuble));

//Redimensionnement continu pendant le déplacement de la barre de division.
panneauMeubleCatalogue.setContinuousLayout(true);

//Affichage en un clic d?une ou de l?autre partie du panneau.
panneauMeubleCatalogue.setOneTouchExpandable(true);

//Changement du poids des composants du panneau partagé pour qu?après un redimensionnement du panneau, ils gardent les mêmes proportions verticalement
panneauMeubleCatalogue.setResizeWeight(0.5);
return panneauMeubleCatalogue;
}

//Renvoie le panneau principal ajouté au centre du composant HomePane dans son constructeur.
private JComponent getMainPane(Logement logement, ControleurLogement controleur) {

JSplitPane mainPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, getPanneauMeubleCatalogue(controleur), getPlanView3DPane(logement, controleur));
mainPane.setContinuousLayout(true);
mainPane.setOneTouchExpandable(true);
mainPane.setResizeWeight(0.3);
return mainPane;
}

//Renvoie le panneau qui contient la vue du plan et la vue 3D du logement.
private JComponent getPlanView3DPane(Logement logement, ControleurLogement controleur) {
JComponent planView = controleur.getControleurPlan().getVue();

//Création du composant de la vue 3D du logement.
JComponent view3D = new LogementComponent3D(logement);
view3D.setPreferredSize(planView.getPreferredSize());
view3D.setMinimumSize(new Dimension(0, 0));

//Ajout des deux composants dans un panneau partagé.
JSplitPane planView3DPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,new JScrollPane(planView), view3D);
planView3DPane.setContinuousLayout(true);
planView3DPane.setOneTouchExpandable(true);
planView3DPane.setResizeWeight(0.5);
return planView3DPane;
}
}










Bien sur il y a d'autres classes et voila le constructeur de la classe ControleurLogement:

public ControleurLogement(Logement logement, PreferencesUtilisateur preferences) {

this.logement = logement;
this.preferences = preferences;

this.undoSupport = new UndoableEditSupport();
this.undoManager = new UndoManager();
this.undoSupport.addUndoableEditListener(this.undoManager);

this.controleurCatalogue = new ControleurCatalogue(preferences.getCatalogue());

this.controleurMeuble = new ControleurMeuble(logement, preferences, this.undoSupport);

this.vueLogement = new PanneauLogement(logement, preferences, this);

ajouterListeners();
}



Remargue: la méthode main se trouve dans la classe ControleurLogementTest


Et enfin, Je vous remercie d'avance à l'attention que vous avez porter à ce message

1 réponse

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
10 mars 2012 à 18:49
Il faudrait que tu rajoutes quelques tests pour identifier ce qui cause l'exception :

if (this.selectToggleModel==null)
    System.err.println("this.selectToggleModel==null");

if (controleur==null)
    System.err.println("controleur==null");
else 
    if (controleur.getControleurPlan()==null)
        System.err.println("controleur.getControleurPlan()==null");

this.selectToggleModel.setSelected(controleur.getControleurPlan().getMode() == ControleurPlan.Mode.SELECTION);
0
heithemnacer Messages postés 11 Date d'inscription jeudi 24 février 2011 Statut Membre Dernière intervention 3 décembre 2012
11 mars 2012 à 12:56
ok je vais tester et je te donne le résultats
merci en tout cas :)
0
heithemnacer Messages postés 11 Date d'inscription jeudi 24 février 2011 Statut Membre Dernière intervention 3 décembre 2012
12 mars 2012 à 14:57
Salut, voila le résultats de test: controleur.getControleurPlan()==null

svp n'hésiter pas de m'aider c'est urgent
et merci d'avance :)
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
12 mars 2012 à 15:06
"c'est urgent", tu as quand même mis deux jours pour faire un copier-coller...

Dans le code que tu as mis il n'y a que le constructeur de la classe ControleurLogement, ce qu'il faudrait c'est avoir le code de la méthode getControleurPlan pour savoir pourquoi elle te renvoie null !
0
heithemnacer Messages postés 11 Date d'inscription jeudi 24 février 2011 Statut Membre Dernière intervention 3 décembre 2012
12 mars 2012 à 16:16
voila la méthode:

public ControleurPlan getControleurPlan() {
return this.controleurPlan;
}

et voila la classe ControleurPlan:




package design3d.swing;

.........
.........

public class ControleurPlan {

//des attributs
.........
.........
.........


public ControleurPlan(Logement logement, PreferencesUtilisateur preferences, UndoableEditSupport undoSupport) {
this.logement = logement;
this.preferences = preferences;
this.undoSupport = undoSupport;
this.resource = ResourceBundle.getBundle(ControleurPlan.class.getName());
this.vuePlan = new PlanComponent(logement, preferences, this);

//Initialisation des cinq états possibles.
this.selectionState = new SelectionState();
this.selectionMoveState = new SelectionMoveState();
this.rectangleSelectionState = new RectangleSelectionState();
this.wallCreationState = new WallCreationState();
this.newWallState = new NewWallState();

//Attribution de l?état de sélection par défaut.
setState(this.selectionState);

}

//d'autres méthodes
.........
.........

}
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
12 mars 2012 à 16:47
Ce qu'il faut trouver c'est pourquoi controleurPlan est égal à null lorsque tu le passes en paramètre de ton constructeur PanneauLogement. Par exemple, dans le constructeur de ControleurLogement il n'y a nul part de " this.controleurPlan = new ControleurPlan()", il faudrait vérifier si c'est normal ou corriger cela.
0