Bonjour,
J'ai réaliser un programme comprenant un main, une classe de gestion et une classe d'erreur.
Mon principal problème est due au fait que je ne peux pas gérer deux erreurs différentes.
Quand l'utilisateur apuie sur le bouton initialisé, le programme envoie dans la classe de traitement le chemin puis test celui-ci. Comme le chemin n'existe pas, il va donc lancer une exception avec une erreur. A partir de là on demande à l'utilisateur s'il veut créer le chemin. S'il répond oui, on crée le chemin, sinon non.
On a créer un chemin, comme l'utilisateur est un vrai boulet, il va à nouveau appuyer sur le bouton initialisé et là c'est un autre type d'erreur que l'on a à aficher. Le chemin est correct et actuelement mon code me demande de créer à nouveau le chemin. Donc on ne sait pas faire la différence entre si le chemin est juste ou non (au niveau des erreurs).
Si je résume ce que je veux faire.
1) Le chemin n'est pas présent -> Erreur + voulez-vous créer le chemin
2) Réponse oui -> création du chemin
3) Le chemin est présent -> Erreur + Voulez-vous revenir aux valeurs par défauts
4) Réponse oui -> On procèdera à la réinitialisation des valeurs
Mon main ressemble à ceci:
Ma classe de gestion
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151 import jProperties.*; import javax.swing.JOptionPane; //import java.io.*; public class Form1 extends javax.swing.JFrame { /** Creates new form Form1 */ public Form1() { initComponents(); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane(); jTextArea1 = new javax.swing.JTextArea(); jMenuBar1 = new javax.swing.JMenuBar(); jMenu1 = new javax.swing.JMenu(); jMenuItem1 = new javax.swing.JMenuItem(); jMenu2 = new javax.swing.JMenu(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jTextArea1.setColumns(20); jTextArea1.setLineWrap(true); jTextArea1.setRows(5); jTextArea1.setAutoscrolls(true); jScrollPane1.setViewportView(jTextArea1); jMenu1.setText("Initialiser"); jMenu1.setToolTipText("Outils d'initialisation logiciel"); jMenuItem1.setText("Initialiser logiciel"); jMenuItem1.setToolTipText("Créer un fichier properties contenant les paramètres logiciels"); jMenuItem1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem1ActionPerformed(evt); } }); jMenu1.add(jMenuItem1); jMenuItem1.getAccessibleContext().setAccessibleDescription("null"); jMenuBar1.add(jMenu1); jMenu2.setText("Affichage"); jMenuBar1.add(jMenu2); setJMenuBar(jMenuBar1); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(288, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 426, Short.MAX_VALUE) ); pack(); }// </editor-fold> private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) { //Initialisation du logiciel //Chemin du fichier de configuration //String PathConf = "/home/vpn/appli/conf.properties"; String pathConf = System.getProperty("user.dir") + "/appli/conf.properties"; /* * Bloc Try/Catch * GestionProp gère des erreur est doit être dans un bloc sécurisé */ try { //Construit un objet GestionProp GestionProp Prop = new GestionProp(); //Place le chemin d'un nouveau properties Prop.setUrl(pathConf); //Crée un nouveau properties Prop.create(); } catch (ErreurGP e) { /* * Traitement de l'erreur par choix utilisateur */ //Choix de résolution de problème int choix = JOptionPane.showConfirmDialog(null, "Voulez vous créer le chemin manquant " + pathConf + " ?", "Que voulez-vous faire ?", JOptionPane.ERROR_MESSAGE); //Traitement des choix if (choix == JOptionPane.NO_OPTION) { //On arrêtera le programme JOptionPane.showMessageDialog(null, "Vous ne pourrez pas profiter pleinement du logiciel sans le fichier " + pathConf + " !", "Information", JOptionPane.INFORMATION_MESSAGE); } else if (choix == JOptionPane.YES_OPTION) { //Construit un objet GestionProp GestionProp Prop = new GestionProp(); //Place le chemin d'un nouveau properties Prop.setUrl(pathConf); //Crée un nouveau répertoire Prop.createPath(); //Crée un nouveau fichier Prop.createProp(); } else if (choix == JOptionPane.CLOSED_OPTION) { //On arrêtera le programme JOptionPane.showMessageDialog(null, "Vous ne pourrez pas profiter pleinement du logiciel sans le fichier " + pathConf + " !", "Information", JOptionPane.INFORMATION_MESSAGE); } } } /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new Form1().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JMenu jMenu1; private javax.swing.JMenu jMenu2; private javax.swing.JMenuBar jMenuBar1; private javax.swing.JMenuItem jMenuItem1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTextArea jTextArea1; // End of variables declaration }
Et enfin, ma classe posant problème, comme le reste d'ailleurs car le fonctionnement n'est pas correct. La classe d'ereur
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
125
126
127
128
129
130
131
132 package jProperties; import java.io.*; import java.util.Properties; import javax.swing.JOptionPane; public class GestionProp { /* * Méthode : Setter * Action : Place l'url du fichier à traiter dans une variable * Reçois : Une url, un chemin au format String */ public void setUrl(String url) { this.urlFichier = url; } /* * Méthode : Création * Action : Crée un fichier en fonction de l'url transmise * Reçois : Une url, un chemin au format String */ public void create() throws ErreurGP { //Teste la validité du chemin if(!validPath()) { /* * Le chemin existe pas * * Erreur via ErreurGP(message, type erreur) Chemin [url] manquant, Répertoire manquant */ throw new ErreurGP("Le chemin " + urlFichier + " est manquant\nou le chemin n'existe pas.", "Répertoire ou fichier manquant !"); } else { /* * Le chemin existe * * Erreur via ErreurGP(message, type erreur) Chemin [url] présent, Répertoire présent */ throw new ErreurGP("Le chemin " + urlFichier + " est présent\nou le chemin existe.", "Répertoire ou fichier présent !"); } } /* * Méthode : Création d'un chemin * Action : Crée un chemin en fonction de l'url * Reçois : Une url, un chemin au format String */ public void createPath() { /* * Crée le répertoire */ //Extrait le chemin du répertoire en fonction du contenu d' urlFichier String newPath = urlFichier.substring(0, urlFichier.lastIndexOf('/')); //Crée une instance File() pour ce chemin File file = new File(newPath); //Crée physiquement le chemin file.mkdir(); } /* * Méthode : Création d'un fichier properties * Action : Crée un fichier en fonction de l'url * Reçois : Une url, un chemin au format String */ public void createProp() { /* * Créer un fichier vide */ //Crée une instance Properties() Properties prop = new Properties(); /* * Bloc Try/Catch * Gère des erreur est doit être dans un bloc sécurisé */ try { //Crée une instance OutputStream() OutputStream propFile = new FileOutputStream(urlFichier); //Crée une instance OutputStreamWriter() pour passer en UTF-8 OutputStreamWriter propCreate = new OutputStreamWriter(propFile, "UTF-8"); //Crée un nouveau fichier avec un commentaire prop.store(propCreate, "@Autor"); //Ferme le flux de création de fichier propCreate.flush(); propCreate.close(); } catch(FileNotFoundException e) { //Indique les ereurs e.printStackTrace(); } catch(IOException e) { //Indique les ereurs e.printStackTrace(); } } /* * Méthode : Tester * Action : Tester la validité d'un chemin depuis l'url locale * Reçois : Une url, un chemin au format String * Retourne : Un true ou un False en fonction du chemin * */ public boolean validPath() { //Si le chemin existe et si il est disponible if(new File(urlFichier).exists()) { return true; //Retourner vrai } else { return false; //Sinon retourner faux } } /* * Champ de la classe GestionProp */ private String urlFichier; }
J'aimerais ne pas avoir à tout refaire mais j'avoue que comme je trouve mon main plutôt chargé je me tâte.
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 package jProperties; import javax.swing.JOptionPane; public class ErreurGP extends Exception { /* * Méthode : Affichage * Action : Crée une exception si une erreur survient * Reçois : Une url, un chemin au format String */ public ErreurGP(String msgErreur, String typeErreur) { this.message = msgErreur; //Message d'erreur this.typeErr = typeErreur; //Type de l'erreur JOptionPane.showMessageDialog(null, message, typeErr, JOptionPane.ERROR_MESSAGE); } /* * Méthode : Getter * Action : Affiche l'erreur au programmeur ou à l'utilisateur * Reçois : Rien */ public String getErreur() { return this.message; } /* * Les méthodes de la classe ErreurUrl */ private String message; private String typeErr; }
Existe-il un moyen de gérer par plusieurs catch ?
Comment rendre ma classe d'erreur utilisable ?
Enfin pourquoi dès que je veux ajouter une nouvelle erreur dans ma classe d'erreur celle-ci est considéré en erreur ?
Partager