Bah au risque de me répéter le seul message d'erreur que ma console me retourne est bien le message d'erreur suivant:
'No operations allowed after connection closed.'
Je n'est absolument rien d'autre.
Bah au risque de me répéter le seul message d'erreur que ma console me retourne est bien le message d'erreur suivant:
'No operations allowed after connection closed.'
Je n'est absolument rien d'autre.
La console n'affiche que ce que tu lui demande d'afficher. Si tu n'as rien d'autre, c'est que tu n'affiche pas les stacktraces de tes exception. Corrige donc ton code pour les afficher qu'on sache exactement ce qui se passe!
Toute mes requetes sql sont entourées par les balises suivante :
donc en théorie il m'affiche toute la stacktraces, a moins que mon code soit incorrect ce qui est très fortement possible vu mon niveau xD
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 try{ Statement st = connect.createStatement(); //query ResultSet queryselectnamerelease = st.executeQuery("SELECT `Name` FROM `Group_Release`"); while (queryselectnamerelease.next()){ String namerelease = queryselectnamerelease.getString("Name"); comboModelgrouprelease.addElement(namerelease); } catch (SQLException ex) { System.err.println(ex.getMessage()); }
Ou pas, la méthode getMessage de la classe Exception ne retourne pas la stacktrace.
Pour afficher la stacktrace tu dois faire undans ton catch en lieu et place du
Code : Sélectionner tout - Visualiser dans une fenêtre à part ex.printStackTrace();
Code : Sélectionner tout - Visualiser dans une fenêtre à part System.err.println(ex.getMessage());
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 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) at com.mysql.jdbc.Util.getInstance(Util.java:384) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929) at com.mysql.jdbc.ConnectionImpl.throwConnectionClosedException(ConnectionImpl.java:1193) at com.mysql.jdbc.ConnectionImpl.checkClosed(ConnectionImpl.java:1180) at com.mysql.jdbc.ConnectionImpl.createStatement(ConnectionImpl.java:2427) at com.mysql.jdbc.ConnectionImpl.createStatement(ConnectionImpl.java:2409) at consult.projecttab$BoutongroupreleaseListener.actionPerformed(projecttab.java:166) at javax.swing.JComboBox.fireActionEvent(Unknown Source) at javax.swing.JComboBox.contentsChanged(Unknown Source) at javax.swing.JComboBox.intervalRemoved(Unknown Source) at javax.swing.AbstractListModel.fireIntervalRemoved(Unknown Source) at javax.swing.DefaultComboBoxModel.removeAllElements(Unknown Source) at Reporting.Fenetrechoix$BoutonconsultListener.actionPerformed(Fenetrechoix.java:300) 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)
Tu peux nous donner le code de
at Reporting.Fenetrechoix$BoutonconsultListener.actionPerformed(Fenetrechoix.java:300)
Ainsi que celui de
at consult.projecttab$BoutongroupreleaseListener.actionPerformed(projecttab.java:166)
Avec, de préférence, la numérotation des lignes qu'on s'y retrouve.
Voici les deux partie de code que vous m'avez demandé.
Alors oui je sais les règle de codage sont pas respecté en même temps quand on a pas de prof pour vous dire se qu'il faut faire et que l'on apprend sur le tas bah on fait rapidement du n'importe quoi et faute de temps j'ai pas repris certaine partie de mon code je m'en excuse donc ^^.
Voici le code de buttonconsultlistener :
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
113
114
115
116
117
118
119
120
121
122
123
124 291 class BoutonconsultListener implements ActionListener{ 292 public void actionPerformed(ActionEvent e) { 293 294 String idgrouprelease = null; 295 String idsection= null; 296 List<String> listidrelease =new ArrayList<String>(); 297 int totnbline = 0; 298 int totnbrequirements = 0; 299 int totnbtest = 0; 300 comboModelgrouprelease.removeAllElements(); 301 comboModelsection.removeAllElements(); 302 303 //start SQL 304 try{ 305 Statement st = connect.createStatement(); 306 //query 307 308 //recovers release name for complete combo box 309 ResultSet queryselectnamerelease = st.executeQuery("SELECT `Name` FROM `Group_Release`"); 310 while (queryselectnamerelease.next()) 311 { 312 String namerelease = queryselectnamerelease.getString("Name"); 313 comboModelgrouprelease.addElement(namerelease); 314 } 315 316 //recovers section nale for complet combo box 317 ResultSet queryselectnamesection = st.executeQuery("SELECT `Name` FROM `Section`"); 318 while (queryselectnamesection.next()) 319 { 320 String namesection = queryselectnamesection.getString("Name"); 321 comboModelsection.addElement(namesection); 322 } 323 324 //recovers group release ID according group release selected in combo obx 325 ResultSet queryselectidgrouprelease = st.executeQuery("SELECT `id` FROM `Group_Release` WHERE `Name` = '"+comboModelgrouprelease.getElementAt(0)+"'"); 326 while (queryselectidgrouprelease.next()) 327 { 328 idgrouprelease = queryselectidgrouprelease.getString("id"); 329 } 330 331 //recovers section ID according section selected in combo box 332 ResultSet queryselectidsection = st.executeQuery("SELECT `id` FROM `Section` WHERE `Name` = '"+comboModelsection.getElementAt(0)+"'"); 333 while (queryselectidsection.next()) 334 { 335 idsection = queryselectidsection.getString("id"); 336 } 337 338 //recovers release ID according group release ID 339 ResultSet queryselectidrelease = st.executeQuery("SELECT `id` FROM `Release` WHERE `id_group_release` = '"+idgrouprelease+"'"); 340 while (queryselectidrelease.next()) 341 { 342 listidrelease.add(queryselectidrelease.getString("id")); 343 } 344 345 int sizelistidrelease = listidrelease.size(); 346 boolean nblineisEmpty = true; 347 boolean nbrequirementsisEmpty = true; 348 boolean nbtestisEmpty = true; 349 for (int h = 0;h<sizelistidrelease;h++) 350 { 351 String idrelease = (String) listidrelease.get(h); 352 353 //recovers nblines according release ID and section ID 354 ResultSet recupnbline = st.executeQuery("SELECT `nblines` FROM `Nblines` WHERE `id_release` = "+idrelease+" and `id_section` = "+idsection+" "); 355 356 while (recupnbline.next()) 357 { 358 nblineisEmpty = false; 359 stringnbline = recupnbline.getString("nblines"); 360 int intnbline = Integer.valueOf(stringnbline).intValue(); 361 totnbline = totnbline + intnbline; 362 stringnbline = String.valueOf(totnbline); 363 } 364 if(nblineisEmpty){ 365 stringnbline ="No value"; 366 } 367 368 //recovers nbrequirements according release ID and section ID 369 ResultSet recupnbrequirements = st.executeQuery("SELECT `nbrequirements` FROM `Nblines` WHERE `id_release` = '"+idrelease+"' and `id_section` = '"+idsection+"'"); 370 371 while (recupnbrequirements.next()) 372 { 373 nbrequirementsisEmpty = false; 374 stringnbrequirements = recupnbrequirements.getString("nbrequirements"); 375 int intnbrequirements = Integer.valueOf(stringnbrequirements).intValue(); 376 totnbrequirements= totnbrequirements + intnbrequirements; 377 stringnbrequirements = String.valueOf(totnbrequirements); 378 } 379 if(nbrequirementsisEmpty){ 380 stringnbrequirements = ("No value"); 381 } 382 383 //recovers nbtest according release ID and section ID 384 ResultSet recupnbtest = st.executeQuery("SELECT `nbtest` FROM `Nblines` WHERE `id_release` = '"+idrelease+"' and `id_section` = '"+idsection+"'"); 385 386 while (recupnbtest.next()) 387 { 388 nbtestisEmpty = false; 389 stringnbtest = recupnbtest.getString("nbtest"); 390 int intnbtest = Integer.valueOf(stringnbtest).intValue(); 391 totnbtest= totnbtest + intnbtest; 392 stringnbtest = String.valueOf(totnbtest); 393 } 394 if(nbtestisEmpty){ 395 stringnbtest = ("No value"); 396 } 397 } 398 } 399 catch (SQLException ex) 400 { 401 ex.printStackTrace(); 402 } 403 //end SQL 404 405 Elementselectgrouprelease = (String) comboModelgrouprelease.getElementAt(0); 406 Elementselectsection = (String) comboModelsection.getElementAt(0); 407 comboModelsection.setSelectedItem(comboModelsection.getElementAt(0)); 408 comboModelgrouprelease.setSelectedItem(comboModelgrouprelease.getElementAt(0)); 409 410 new choosevue(connect); 411 Frame.setVisible(false); 412 413 } 414 }
Et voici le code de boutongroupreleaselistener:
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 154 class BoutongroupreleaseListener implements ActionListener{ 155 public void actionPerformed(ActionEvent e) { 156 157 String idgrouprelease = null; 158 List<String> listidrelease =new ArrayList<String>(); 159 int totnbline = 0; 160 int totnbrequirements = 0; 161 int totnbtest = 0; 162 Elementselectgrouprelease = (String) 163 ComboBoxgrouprelease.getSelectedItem(); 164 165 //start SQL 166 try{ 167 Statement st = connect.createStatement(); 168 //query 169 170 //recovers group release ID according group release selected in combo obx 171 ResultSet queryselectidgrouprelease = st.executeQuery("SELECT `id` FROM `Group_Release` WHERE `Name` = '"+Elementselectgrouprelease+"'"); 172 while (queryselectidgrouprelease.next()) 173 { 174 idgrouprelease = queryselectidgrouprelease.getString("id"); 175 } 176 177 //recovers release ID according group release ID 178 ResultSet queryselectidrelease = st.executeQuery("SELECT `id` FROM `Release` WHERE `id_group_release` = '"+idgrouprelease+"'"); 179 while (queryselectidrelease.next()) 180 { 181 listidrelease.add(queryselectidrelease.getString("id")); 182 } 183 184 int sizelistidrelease = listidrelease.size(); 185 boolean nblineisEmpty = true; 186 boolean nbrequirementsisEmpty = true; 187 boolean nbtestisEmpty = true; 188 for (int g = 0;g<sizelistidrelease;g++) 189 { 190 String idrelease = (String) listidrelease.get(g); 191 192 //recovers nblines according release ID and section ID 193 ResultSet recupnbline = st.executeQuery("SELECT `nblines` FROM `Nblines` WHERE `id_release` = "+idrelease+" "); 194 195 while (recupnbline.next()) 196 { 197 nblineisEmpty = false; 198 stringnbline = recupnbline.getString("nblines"); 199 int intnbline = Integer.valueOf(stringnbline).intValue(); 200 totnbline = totnbline + intnbline; 201 stringnbline = String.valueOf(totnbline); 202 Labelnumberofnbline.setText(stringnbline); 203 } 204 if(nblineisEmpty){ 205 stringnbline ="No value"; 206 Labelnumberofnbline.setText(stringnbline); 207 } 208 209 //recovers nbrequirements according release ID and section ID 210 ResultSet recupnbrequirements = st.executeQuery("" + "SELECT `nbrequirements` FROM `Nblines` WHERE `id_release` = '"+idrelease+"'"); 211 212 while (recupnbrequirements.next()) 213 { 214 nbrequirementsisEmpty = false; 215 stringnbrequirements = recupnbrequirements.getString("nbrequirements"); 216 int intnbrequirements = Integer.valueOf(stringnbrequirements).intValue(); 217 totnbrequirements= totnbrequirements + intnbrequirements; 218 stringnbrequirements = String.valueOf(totnbrequirements); 219 Labelnumberofrequirements.setText(stringnbrequirements); 220 } 221 if(nbrequirementsisEmpty){ 222 stringnbrequirements = ("No value"); 223 Labelnumberofrequirements.setText(stringnbrequirements); 224 } 225 226 //recovers nbtest according release ID and section ID 227 ResultSet recupnbtest = st.executeQuery("" + "SELECT `nbtest` FROM `Nblines` WHERE `id_release` = '"+idrelease+"'"); 228 229 while (recupnbtest.next()) 230 { 231 nbtestisEmpty = false; 232 stringnbtest = recupnbtest.getString("nbtest"); 233 int intnbtest = Integer.valueOf(stringnbtest).intValue(); 234 totnbtest= totnbtest + intnbtest; 235 stringnbtest = String.valueOf(totnbtest); 236 Labelnumberoftest.setText(stringnbtest); 237 } 238 if(nbtestisEmpty){ 239 stringnbtest = ("No value"); 240 Labelnumberoftest.setText(stringnbtest); 241 } 242 } 243 244 } 245 catch (SQLException ex) 246 { 247 ex.printStackTrace(); 248 } 249 //end SQL 250 } 251 }
ps : j'entend d'ici les ' HOUUUU!!!! TON CODE IL EST POURRI' :p
pour être clair, au niveau de l'interface, lors du logout:
1) tu supprime de l'écran toutes les fenetres
2) tu affiche une fenetre de logging
3) tu recréer de nouvelle fenetres, fenetres auxquelles tu passe le nouvel objet connect
C'est bien ça?
Parce que, a voir ton code, je dirait que ton listener (BoutongroupreleaseListener) quand il fait Statement st = connect.createStatement(); il continue d'utiliser l'ancien. Donc je me demande
-> d'ou viens ce "connect"? Comment il est initialisé, comment tu t'assure qu'il est bien remplacé par le nouveau lorsque tu fais une nouvelle connection.
Je pense avoir compris mon erreur mais je ne suis pas sur donc pour répondre a tes question.
'Connect' est ma connection a ma BDD que j'initialise a la page de login juste avant d'apeller la page suivante:
Ensuite,et je pense que mon erreur est la: pour les listener de mes boutons j'utilise la synthaxe suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Connect maconnection = new Connect(userright, password); connect = maconnection.getConnect(); new Fenetrechoix(connect); Frame.setVisible(false);
J'ai partagé la connection avec la classe au dessus mais pas avec la class du listener ( je sais pas si je suis clair :s ) du coup le listener ne doit pas changé sa connection lorsque je me déconnecte. Je suis pas trop sur de moi la.
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 public class projecttab { private Connection connect; public projecttab(Connection connect){ super(); this.connect=connect; //appel d'un fonction pour dessiner ma fenetre ajouter les composants } //group release combo box private JComboBox getComboBoxgrouprelease() { if (ComboBoxgrouprelease == null) { ComboBoxgrouprelease = new JComboBox(comboModelgrouprelease); ComboBoxgrouprelease.setBounds(100, 90, 150, 20); ComboBoxgrouprelease.addActionListener(new BoutongroupreleaseListener()); } return ComboBoxgrouprelease; } //listener group release combo box class BoutongroupreleaseListener implements ActionListener{ public void actionPerformed(ActionEvent e) { //Actions } } }
il faut que pour chaque nouvelle connection tu aie un nouveau projecttab qui soit instancié. Bref, il faut qu'aucune classe ne garde de référence à l'ancienne connexion.
Je pense que c'est le cas:
mais au vu de mon erreur cela ne doit pas être le cas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public void project() { panelproject = new JPanel(); panelproject.setLayout(null); new projecttab(connect); }
Bonjour,
Voila alors suite à plusieur test et réécriture / simplification de code je suis arrivé a la conclusion de forcé la réinitialisation de ma variable qui représente ma connection a ma BDD avant de l'instancier.
Certe c'est moche, mais !! car il y a un mais :p et bien sa marche ^^ enfin plus ou moins. En effet mon programme fonctionne parfaitement ( il ne bloque pas il me retourne bien toute les valeurs de ma base de donnée ) mais le prob persiste en gros sa fonctionne mais il me retourne toujours les même erreur dans la console. Une explication pourquoi la stacktrace me dit que l'opération est invalide car ma connection est fermé alros que sa fonction et que donc ma connection est ouverte?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 connect_reporting_config=null; ConnectReportingConfig instance_connect_reporting_config = new ConnectReportingConfig(userright, password); connect_reporting_config = instance_connect_reporting_config.getConnect(); new ChooseVue(connect_reporting_config); Frame.setVisible(false);
ben lit le stacktrace et en fonction de ça détermine où on continue à utiliser l'ancienne connexion.
Question toute bête mais lorsque l'on instancie une classe le programme passe forcément pas le constructeur?
Bonjour,
Après plusieurs test, j'ai trouvé une solution qui reste moche et qui est contraire a se que tu ma dis mais qui a le mérite de marché.
En gros je passe ma connection a toute mes classes comme tu m'avait conseiller plutot que faire avec un static) mais pour les classes ou j'en ai besoin je la défini comme static pour que lorsque dans une autre classe je clique sur mon bouton logout je puisse l'initialiser a null.
c'est moche je sais mais vu que je n'ai pas trouvé d'autre solution bah sa fera comme sa ^^.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager