Problème de mise a jour JComboBox

Résolu
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011 - 1 juil. 2011 à 09:28
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011 - 1 juil. 2011 à 16:18
Bonjour a toutes et a tous,

Je vous expose mon problème :
J'ai sur mon ihm 3 JPanel, chaque panel est dédié a une fonction (ajout/modif/suppr), mon problème est que quand je désire mettre a jour un produit, la modification du coté BDD est OK, sauf que le contenu de ma JComboBox de ma fonction suppr (qui est aussi remplit par le SQL) ne se change pas.

La JComboBox doit etre chargé au lancement de l'application, ce qui m'entraine une erreur quand je fait ma méthode :

if(e.getSource()==BModifProd)
{
try
{
GestionStocks.updateProd();
LConfMProd.setText("Modification effectuée !");
CLibSProd.removeAllItems();
cb_prod();
}
catch(Exception ioe){System.out.println(ioe);}
}

il me retourne une erreur de type nullPointerException (aie), ce qui me semble normal étant donné que la JComboBox est se vide entierement, et se fait remplir aussitot par la méthode cb_prod() ...

Je ne vois pas trop comment "mettre a jour" le contenu de ma JComboBox :/

15 réponses

H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011
1 juil. 2011 à 16:11
Au final j'avance un peu, j'ai trouvé pourquoi l'erreur survenait, en effet j'ai mis in itemListerner sur CLibSProd, et dans ce morceau de code, j'utilisais un StringTokenizer, l'erreur est du au fait que je vide la combobox et que mon stringTokenizer se retrouvait vide !

le code de mon itemListerner sur mon CLibSProd :

if(e.getSource()==CLibSProd)
{
StringTokenizer st1 = new StringTokenizer(CLibSProd.getSelectedItem().toString());
int NoProd = Integer.parseInt(st1.nextToken());

String reqInfoProd= "SELECT * "
+ "FROM Produit, Fournisseur, Categorie "
+ "WHERE Produit.NoFourn = Fournisseur.NoFourn "
+ "AND Produit.NoCateg = Categorie.Nocateg "
+ "AND NoProduit="+NoProd+";";
Statement stmtInfoProd;
Connection connInfoProd;

try
{
connInfoProd = DriverManager.getConnection("jdbc:mysql://localhost/stocks","root","");
stmtInfoProd = connInfoProd.createStatement();
ResultSet res = stmtInfoProd.executeQuery(reqInfoProd);
while(res.next())
{
SRefSProd.setText(res.getString("RefProduit"));
SPrixHTSProd.setText(Double.toString(res.getDouble("PrixHTProduit")));
SPrixTTCSProd.setText(Double.toString(res.getDouble("PrixTTCProduit")));
SPoidsSProd.setText(Double.toString(res.getDouble("PoidsProduit")));
SCategSProd.setText(res.getString("NomCateg"));
SFournSProd.setText(res.getString("NomFourn"));
}
res.close();
}
catch (Exception ioe){System.out.println(ioe);}
}

Pour remédier a cela, j'ai retirer le itemlistener, vider la combobox, rappeller l'itemlistener et relancer la méthode cb_prod();, voila le code :

if(e.getSource()==BModifProd)
{
try
{
GestionStocks.updateProd();
LConfMProd.setText("Modification effectuée !");
CLibSProd.removeItemListener(this);
CLibSProd.removeAllItems();
CLibSProd.addItemListener(this);
cb_prod();
}
catch(Exception ioe){ioe.printStackTrace();}
}

Donc maintenant que ce problème est géré, il faut que je trouve le moyen de mettre a jour le contenu de ma combobox ...
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
1 juil. 2011 à 09:42
Normalement les comboBox se mettent a jour facilement avec les méthodes addItem et removeItem.

Je ne comprends pas d'où vient ta NullPointerException. Peux tu nous donner la trace de ton erreur ?
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
1 juil. 2011 à 09:43
Et ajouter un peu de code pour qu'on puisse voir d'ou vient l'erreur précisément
0
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011
1 juil. 2011 à 09:50
Salut et merci de la rapidité de ta réponse.

Alors au tout début de la classe, lorsque j'initialise l'ihm :

cb_prod(); // méthode qui remplit toutes les combobox avec les libellés des produits

public void cb_prod()
{
String req= "SELECT * FROM Produit ORDER BY NoProduit;";
Statement stmt;
Connection conn;

try
{
conn = DriverManager.getConnection("jdbc:mysql://localhost/stocks","root","");
stmt = conn.createStatement();
ResultSet res = stmt.executeQuery(req);
while(res.next())
{
CLibMProd.addItem(res.getInt("NoProduit")+" - "+res.getString("LibProduit"));
CLibSProd.addItem(res.getInt("NoProduit")+" - "+res.getString("LibProduit"));
//CEntLibProd.addItem(res.getInt("NoProduit")+" - "+res.getString("LibProduit"));
//CSorLibProd.addItem(res.getInt("NoProduit")+" - "+res.getString("LibProduit"));
}
res.close();
}
catch (SQLException e){System.out.println(e);}
}

Ensuite, le code qui pose soucis :

if(e.getSource()==BModifProd)
{
try
{
GestionStocks.updateProd(); // on appelle la méthode pour mettre a jour dans la base de données
LConfMProd.setText("Modification effectuée !"); // on confirme la modification
CLibSProd.removeAllItems(); // on vide entierement la combobox de libProduit dans le panel "suppr"
cb_prod(); // on remplit la combobox de nouveau avec la BDD mise a jour
}
catch(Exception ioe){System.out.println(ioe);}
}

Voila je pense que j'ai tout mis ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011
1 juil. 2011 à 09:55
Je pense que l'erreur vient du fait que je fais un removeallItems(); ...
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
1 juil. 2011 à 10:54
Il manque la trace de ton erreur, et j'aimerais bien voir les fonctions que tu appelles (là ou se trouvent les erreurs)
0
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011
1 juil. 2011 à 11:03
la trace de l'erreur :

java.lang.NullPointerException
at gestionstocks.IHM.itemStateChanged(IHM.java:1250)
at javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1207)
at javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1255)
at javax.swing.JComboBox.contentsChanged(JComboBox.java:1311)
at javax.swing.JComboBox.intervalRemoved(JComboBox.java:1333)
at javax.swing.AbstractListModel.fireIntervalRemoved(AbstractListModel.java:161)
at javax.swing.DefaultComboBoxModel.removeAllElements(DefaultComboBoxModel.java:169)
at javax.swing.JComboBox.removeAllItems(JComboBox.java:753)
at gestionstocks.IHM.actionPerformed(IHM.java:1329)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6038)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

et pour les fonction que j'appelle :

@Override
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==BModifProd)
{
try
{
GestionStocks.updateProd();
LConfMProd.setText("Modification effectuée !");
CLibSProd.removeAllItems();
cb_prod();
}
catch(Exception ioe){ioe.printStackTrace();}
}
}
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
1 juil. 2011 à 11:20
Est ce que tu as initlisé ta JComboBox CLibSProd, avec un new, c'est elle qui est à null. Meme sii elle est vide, tu l'initialises à vide et tu n'auras pas cette erreur
0
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011
1 juil. 2011 à 14:57
J'ai essayé de la ré-initialisé a vide :

CLibSProd = new JComboBox();
cb_prod();

l'erreur n'est plus, mais il ne me met pas le nouveau contenu de la BDD qui est mis a jour
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
1 juil. 2011 à 15:37
Si tu m'avais donné le code de GestionStocks.updateProd(); ainsi que la classe toute entière qui pose problème, ton problème serait surement déjà résolut...
0
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011
1 juil. 2011 à 15:39
bah le problème c'est que j'utilise un singleton, y'a au moins 4 classes et le tout y'en a pour pas loin de 2000 lignes de code ... envoie moi ton mail en privé et je t'envoie directement le projet en .rar si tu veux
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
1 juil. 2011 à 15:48
Les nullPointerException sont normalement faciles à trouver en mode debug.

Ce qui se passe, c'est que tu dois à un moment donné instancier ton JComboBox à null, ou alors tu as une méthode qui le rend null.

L'erreur survient quand tu essayes de vider don JComboBox, ce n'est pas le fait de vider qui te génère l'erreur.
0
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011
1 juil. 2011 à 15:53
Bah justement, je sais pas trop, sa ne vient pas de la méthode updateProd(); car la mise a jour s'effectue bien au niveau de la base de données, et l'erreur est soulignée a la ligne ou je fait CLibSProd.removeAllItems(); ... si je met cette ligne la en commentaire, il n'y a plus d'erreurs, et cb_prod() marche niquel, sauf que sa me rajoute les occurences dans la combobox qui n'est pas vidé, et je me retrouve donc avec toutes les infos en double ...
0
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011
1 juil. 2011 à 16:13
Et encore (désolé pour le triple post), ce n'est pas mettre a jour le contenu entier de ma combobox, mais seulement l'item que j'ai modifié ... donc un seul item
0
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011
1 juil. 2011 à 16:18
(quadruple post pas taper svp)

la mise a jour de la combobox est faite automatiquement, du fait que je rappelle la méthode cb_prod(); (légèrement modifiée)

Donc ca marche niquel !

Merci beaucoup Julien39 de m'avoir aidé (sans tes questions j'aurais jamais trouvé d'ou venait l'erreur ^^), j'ai encore un peu de mal avec la logique :/

Merci beaucoup et si quelqu'un a des questions, envoyez-moi un message privée ;)

H4rDBuG
0
Rejoignez-nous