Mon code fonctionne bien sans l’enregistrement, c’est l’hors de l’évolution qu’il me pose problème.
J’ai fait des trais et des dessins que j’ai appeler «*forme*» , ils sont sur plusieurs feuille mais tous enregistrés dans un même Hashtable que seul la clef différencie.
Six feuilles donc
les clef de 0 a 5 représentent les feuilles, leurs objet est le nombre de formes de chaque feuille.
La clef 1.1 est le première forme de la feuille 1,
La clef 1.2 la seconde ect…
La clef 2.1 est le première forme de la feuille 2
ect…
J’ai enregistrer les formes dans un fichier texte, je les extrait sans problème.
Que je passe le Hashtable par référence ou que je les copie d’un Hashtable passer par valeur ne change rien.
Le problème viens quand je veux utiliser le Hashtable , sur le débogueur je retrouve toutes mes formes mais la clef ne me permet pas de récupérer l’objet.
Je suis dépasser je ne comprend pas, si quelqu’un pouvait me dire quel est le problème et me donner une solution.
Le code d’enregistrement et de récupération des formes
Code d’utilisation des formes réduit a la portion ou le hachtable est utilisé.
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 package en_forme; import java.io.*; import java.util.*; import javax.swing.*; /** * * @author Janosor */ public class Enregistrement_forme { public void enregistrer (Hashtable hash_forme) { ouvrire(hash_forme); } public Hashtable extraction() { Hashtable hash_forme = new Hashtable(); String str_clef = ""; String str_forme = ""; Stocage sto_tirrage = new Stocage(); try { String str_nom = "C:/.. ./formes.txt"; FileReader fred_nom_fichier = new FileReader(str_nom); BufferedReader buf_wrt_forme = new BufferedReader (fred_nom_fichier); do { str_clef = buf_wrt_forme.readLine(); str_forme = buf_wrt_forme.readLine(); hash_forme.put(str_clef,str_forme ); }while (buf_wrt_forme.ready() );//boo_fin != true); buf_wrt_forme.close(); } catch (EOFException e) { message_erreur( "EOF Exception" + e); } catch(java.io.IOError e) { message_erreur( "IOErreur" + e); } catch (java.io.IOException e) { message_erreur(" IOExeption" + e); } finally { //message_erreur (" finally"); } return (hash_forme); } private void ouvrire(Hashtable hash_forme)//enregistrement { try { String fr_nom = "C:/ /formes.txt"; FileWriter fwrt_nom_fichier = new java.io.FileWriter(fr_nom); BufferedWriter buf_wrt_forme = new BufferedWriter (fwrt_nom_fichier); Iterator toutes_clef; Iterator toutes_formes; toutes_clef = (Iterator)hash_forme.keys(); toutes_formes = (Iterator)hash_forme.elements(); while ( (toutes_clef.hasNext()) && (toutes_formes.hasNext())) { buf_wrt_forme.write(String.valueOf(toutes_clef.next())); buf_wrt_forme.newLine(); buf_wrt_forme.write(String.valueOf(toutes_formes.next())); buf_wrt_forme.newLine(); } buf_wrt_forme.close(); } catch (EOFException e) { message_erreur( "EOF Exception" + e); } catch(java.io.IOError e) { message_erreur( "IOErreur" + e); } catch (java.io.IOException e) { message_erreur(" IOExeption" + e); } finally { //message_erreur (" finally"); } } private void message_erreur(String str_erreur) { javax.swing.JFrame Jfr_erreur = new JFrame("Erreur dans extraxion"); Jfr_erreur.setBounds(100, 100, 300, 200); javax.swing.JTextArea Jtxt_erreur = new JTextArea(); Jtxt_erreur.setText(str_erreur); Jtxt_erreur.setBounds(20, 20, 200, 100); Jfr_erreur.add(Jtxt_erreur); Jfr_erreur.setEnabled(true); Jfr_erreur.setVisible(true); } }
Au départ j’avais fait sa par valeur mais j’avais le même problème, putAll() fonctionnait très bien aussi que je caste ou pas le Map, mais actuellement il n’est pas ulilisé.
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 //Le hach_forme donne un objet quil faut convertir en String, pour le convertir en int après String str_nb_f = String.valueOf(hash_forme.get(int_num)); //Lérreure se voie ici car str_nb_f a la valleur null alors que le Hashtable est correcte. int int_compte_forme = Integer.parseInt(str_nb_f); //dessin de forme if (int_compte_forme >=1) { //str_clef = (String.valueOf(int_num)+"."+String.valueOf(int_nb_formes[int_num])); //hash_forme.put(str_clef, new String(str_forme)); //int_nb_formes[int_num]++; //hash_forme.put(int_num, int_compte_forme); for (int j = 0; j<=int_compte_forme-1;j++) { String clef = (int_num + "." + (j)); String str_poly_forme = String.valueOf(hash_forme.get(clef)); int int_longueur = str_poly_forme.length(); int int_pt_n = str_poly_forme.lastIndexOf("n"); int int_nb_pt = Integer.parseInt(str_poly_forme.substring((int_pt_n +1), int_longueur)); int []tab_int_x = new int[int_nb_pt]; int []tab_int_y = new int[int_nb_pt]; int int_position_x = 0; int int_position_y = 0; int int_position_virgule=0; String str_x; String str_y; for ( int i = 1; i<= int_nb_pt;i++) { int_position_x =(str_poly_forme.indexOf("x", int_position_y)); int_position_y = (str_poly_forme.indexOf("y", int_position_x)); int_position_virgule = (str_poly_forme.indexOf(",", int_position_y)); str_x = str_poly_forme.substring(int_position_x+1, int_position_y); str_y = str_poly_forme.substring(int_position_y+1, int_position_virgule); tab_int_x[i-1] = Integer.parseInt(str_x); tab_int_y[i-1] = Integer.parseInt(str_y); } g.setColor(Color.red); //g.drawPolygon(tab_int_x, tab_int_y, int_nb_pt); g.fillPolygon(tab_int_x, tab_int_y, int_nb_pt); }
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 public void set_hash(Hashtable hash_fo) { //hash_forme.putAll((Map)hash_fo); Iterator toutes_clef; Iterator toutes_formes; toutes_clef = (Iterator)hash_fo.keys(); toutes_formes = (Iterator)hash_fo.elements(); while ( (toutes_clef.hasNext()) && (toutes_formes.hasNext())) { hash_forme.put(String.valueOf(toutes_clef.next()), String.valueOf(toutes_formes.next())); } }
J’ai tracer le problème jusqu’à class Hashtable qui ici me renvoi null
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public synchronized V get(Object key) { Entry tab[] = table; int hash = key.hashCode(); int index = (hash & 0x7FFFFFFF) % tab.length; for (Entry<K,V> e = tab[index] ; e != null ; e = e.next) { if ((e.hash == hash) && e.key.equals(key)) { return e.value; } } return null; }
Merci d'avance a tout ceux qui vont prendre du temps pour mon problème.
Partager