IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

[Classes] Débutant et quelques soucis !


Sujet :

avec Java

  1. #1
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Points : 123
    Points
    123
    Par défaut [Classes] Débutant et quelques soucis !
    Bonsoir,
    Sur les conseils que j'ai pu obtenir, j'ai décider de refaire une classe qui posait problème.

    Quand j'écris sous netbeans le code qui va suivre, j'ai droit à une belle erreur...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    package jProperties;
     
    import java.io.*;
    import java.util.Properties;
     
    public class GestionProp throws ExcErreurFichier {
     
    }
    Erreur :
    '{' expected
    Meme si j'ajoute un début de classe EXCErreurFichier, j'ai la même erreur !
    Pourquoi ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Points : 595
    Points
    595
    Par défaut
    Salut toi !

    La définition throws ExcErreurFichier n'est pas valide.
    Une classe ne peut déclarer un déclenchement d'exception.
    Ce sont les méthodes qui le peuvent.

    En gros NetBeans te dit qu'il attend l'accolade d'ouverture de la classe comme il comprend pas pourquoi il trouve quelque chose de non autorisé dans la déclaration.
    Ils flottent tous en bas

  3. #3
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonsoir,

    voila un peu de code que j'ai trouvé sur Internet:
    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
    class MaDefinedException extends Exception
     {
      public MaDefinedException(String str)
      {
         super(str);
      }  
     }
     
     public class MaClass
     {
        public static void showMyName(String str) throws MaDefinedException
        {
              if(str.equals("What is your Name?"))
                    throw new MaDefinedException("Bla bla");
        }
        public static void main(String a[])
        {
           try
           {
              showMyName("What is your Name?");
           }
           catch(MaDefinedException mde)
           {
              mde.printStackTrace();
           }
         }
     }
    D'après ce que je vois, la classe ne lance pas d'exception, ce sont ses méthodes qui le font.

    En espérant que cela vous aide...
    @ bientôt...

    Salut & @+ sur 3W!

  4. #4
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Points : 123
    Points
    123
    Par défaut
    Ok, je comprends mieux !

    Donc je devrais faire:

    Fichier GestionProp.java

    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
     
    package jProperties;
     
    import java.io.*;
    import java.util.Properties;
     
    public class GestionProp {
       public void setUrl(String url) {
          this.urlFichier = url;
       }
     
       public void create throws ErreurUrl {
          // Si le fichier existe déjà
          if(new File(url).exists()) {
             thow new ErreurUrl(url);
          }
     
          //Il n'y a pas et d'erreur alors on poursuit le traitement
       }
     
       private String url;
    }
    Classe d'erreur fichier ErreurUrl.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class ErreurUrl extends Exception {
     
    public ErreurUrl(String urlFichier) {
     
       public String getMessage() {
          message = "Le fichier demandé n'existe pas ou ne se trouve pas à l'endroit renseigné. Chemin retournant l'erreur : urlFichier";
          return message;
       }
     
       private String urlFichier;
       private String message;
    }
    ... Enfin si j'ai bien compris !

    Je fait un edit pour ajouter cette possibilité
    Que se passerais-t-il si je changeais la partie erreur par:
    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
     
    public class ErreurUrl extends Exception {
     
       public ErreurUrl(String urlFichier) {
          message = "Le fichier demandé n'existe pas ou ne se trouve pas à l'endroit renseigné. Chemin retournant l'erreur : urlFichier";
          System.err.println(message);
       }
     
       public String getMessage() { 
          return this.message; 
       }
     
       private String urlFichier;
       private String message;
    }
    Je ne sait plus trop...

  5. #5
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Points : 313
    Points
    313
    Par défaut
    Bonjour,

    Ce qui changerait serait l'instanciation de la variable d'instance message.
    Dans votre premier essai, vous réinstanciez à chaque appel message, ceci prend plus de temps, plus de mémoire ...
    Dans le second, vous instanciez une seule fois dans le constructeur ... ce qui est beaucoup plus efficace.

  6. #6
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    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
     
    public class ErreurUrl extends Exception 
    {
     
       public ErreurUrl(String urlFichier) 
      {
          super("Le fichier demandé n'existe pas ou ne se trouve pas à l'endroit renseigné. Chemin retournant l'erreur : "+urlFichier);
          this.urlFichier=urlFichier;
       }
     
        public String getUrlFichier()
        {
         return urlFichier;
        }
     
       private String urlFichier;
    }

  7. #7
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Points : 123
    Points
    123
    Par défaut
    donc je vais opter pour la seconde méthode. Toutefois, j'ai une nouvelle question. Je parle d'utilisé deux fichiers, mais faut-il appeler le second dans le premier ou le simple fait de l'extends suffi ?

  8. #8
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    De quelles classes parles tu? de la classe UrlException et GestionProp?

    Si la réponse est oui, alors il te faut les deux fichiers source java. ces deux classes doivent pouvoir exister indépendamment l'une de l'autre. C'est aussi la seule façon de faire une classe réutilisable.

    Si tu veux un peu de théorie. Si les deux classes doivent se trouver dans un seul fichier (UrlException membre de GestionProp), la classe UrlException ne pourra exister sans une instance de la classe GestionProp.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    GestionProp p = new GestionProp();
    UrlException ex = p.new Urlexception();
    Il serait alors impossible depuis une autre C de lancer une Exception UrlException sans y attacher une classe GestionProp.

  9. #9
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Points : 123
    Points
    123
    Par défaut
    Donc, si je comprends bien, en séparant les deux, une seule classe d'erreur peut gérer facilement le même type d'erreur à plusieurs classes utilisant les mêmes points d'entrées.

    Pour moi la classe GestionProp déclenche des exceptions mais il en sera de même pour, par exemple, GestionXml que je compte faire plus tard. Dans les deux cas, on a une url d'entrée et forcément des erreurs du même type. Donc UrlException doit pouvoir agir avec les deux classes.

    Je ne sait pas si je suis clair.. peut être que je m'égare ou que je mélange.

  10. #10
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    C'est bien ça. C'est une classe dérivant de Exception donc tu peux l'utiliser au même titre que les autres classes d'exception que tu connais. Tu peux les lancer et les attraper dans les classes que tu veux, si ton modèle le permet.

  11. #11
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Points : 123
    Points
    123
    Par défaut
    Ok !

    Je suis partant pour cette seconde possibilité. Je pense attaqué cette prog dans la semaine et voir de quoi il en retourne réellement.

    P.S. Je ne ferme pas le post car j'attends les tests réels pour voir si j'ai de nouvelles questions à ce sujet. Si oh combien ça fonctionne et que je n'ai pas d'autres questions, je fermerais le post avec un tag résolu.

  12. #12
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Points : 123
    Points
    123
    Par défaut
    Comme je m'y attendais !!!
    Comme je m'y attendais, la classe me génère une erreur quand j'écris ceci:
    GestionProp.java
    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
     
    package jProperties;
     
    import java.io.*;
    import java.util.Properties;
     
    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;
        }
     
     
        public void create throws ErreurUrl {
     
        }
     
        /*
         * Champ de la classe GestionProp
         */
     
        String urlFichier;
    }
    avec l'erreur suivante sur la ligne nommé " public void create throws ErreurUrl {":
    '(' Expected
    ErreurUrl.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    package jProperties;
     
    public class ErreurUrl {
     
    }
    Pourquoi ?

  13. #13
    Membre habitué
    Inscrit en
    Juin 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juin 2009
    Messages : 138
    Points : 159
    Points
    159
    Par défaut
    Il faut que ta classe ErreurUrl hérite de la classe Throwable.
    En gros, quand tu lèves une exception, "tu lèves quelque chose de Throwable", ou encore "tu throw un objet Throwable"

    La classe Exception hérite déjà de Throwable. Tu peux donc faire hériter ta classe ErreurUrl de Exception.

    tu peux aller voir la Javadoc pour plus d'info. Tu trouveras pour la classe Throwable :
    The Throwable class is the superclass of all errors and exceptions in the Java language.
    De plus, l'erreur de compilation vient du fait que tu dois mettre les parenthèses après create pour indiquer les paramètres (même si y'aura rien dans les parenthèses).

  14. #14
    Membre éprouvé Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Points : 1 154
    Points
    1 154
    Par défaut
    Bonjour,
    il manque les parenthèses qui contiendraient les arguments s'il y en avait. Comme il n'y a en pas il suffit de rajouter des parenthèses vides:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        public void create() throws ErreurUrl {
            
        }
    }
    Veuillez agréer nos sentiments les plus distingués. Soyez assurés de notre entière collaboration, bien à vous pour toujours et à jamais dans l'unique but de servir l'espérance de votre satisfaction, dis bonjour à ton père et à ta mère, bonne pétanque, mets ton écharpe fais froid dehors.

  15. #15
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Points : 123
    Points
    123
    Par défaut
    Effectivement pour les parenthèses de create... Han quel noob je fait sur ce coup.

    Après avoir poster le code, je suis retourné sur ErreurUrl et effectivement il manquerais un extends exception... Le noob sur ce coup.

    [mode j'me lamente]Et bien ce n'est pas demain que j'arriverais à faire une classe du premier coup ![/mode j'me lamente]

  16. #16
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Points : 123
    Points
    123
    Par défaut
    J'avance petit à petit.
    J'ai donc construit un main, pour essayer ma classe. Si je regarde l'algorithme, je me dis la chose suivante:
    Si le bouton initialisé est pressé.
    Début

    Créer une url statique dans le programme
    Passer à la classe via setUrl() l'url du fichier

    Si le fichier n'est pas présent
    Début

    On crée un fichier vide à l'url via la méthode create()
    On inscrit les données d'initialisations dans le fichier via updateNew()
    Sinon

    On initialise uniquement les champs d'initialisation via updateExists()

    Fin
    Fin
    Le souci est que j'ai volontairement créer des exceptions afin que le programmeur puisse débugger son logiciel lorsque il utilise une de mes classes et qu'un utilisateur tombe dans le piège du déplacement de fichier. Une erreur humaine est si vite arrivé !

    Ce qui me chagrine, c'est que la dans mon algorytme, je sait quoi faire et d'ailleurs je vais faire tout ce que je peux pour y arrivé, mais je ne retourne aucune erreur.

    Les questions
    Comment faut-il s'y prendre pour que la classe d'exception que j'ai créer puisse indiquer le message bloquant, avec un Ok, sur le fait que le fichier n'existe pas ?

    Comment je dois m'y prendre pour que s'il clique sur Ok, alors on procèdera à la création du fichier ?

    Enfin faut-il que je vous mette la copie de ce que j'ai déjà écrit ?
    Pour informations, c'est loin d'être complet !

  17. #17
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    [edit]
    Au fait, c'est à la classe d'exception d'afficher le message. Mais la méthode dans la l'exception est attrapée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     try
    {
     //operation possible de lancer l'exception
    }
    catch(UrlException ex)
    {
     //affichage du message
    //autre traitement
    }
    [/edit]

    pour ajouter la boite de dialogue bloquante avec le bouton OK comme tu le dis, il te faut d'abord choisir une bibliothèque graphique.
    Si tu choisis d'utiliser par exemple swing, le composant est JOptionPane. La javadoc va te donner plus de détails.
    voici un exemple,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
         int choix=JOptionPane.showConfirmDialog(ParentFrame, "Creer un nouveau fichier ?", "test",JOptionPane.YES_NO_OPTION);
         if(choix==JOptionPane.YES_OPTION)
         {
          System.out.println("creation fichier");
         }
         else
         {
          System.out.println("Il fallait choisir yes! :D");
         }
    ParentFrame est la Jframe dans laquelle est affichée la boite de dialogue

  18. #18
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Points : 123
    Points
    123
    Par défaut
    donc je devrais alors orienté mon algorithme vers:
    Si le bouton initialisé est pressé.
    Début

    Créer une url statique dans le programme
    Passer à la classe via setUrl() l'url du fichier


    Si le fichier n'est pas présent
    Try
    Début

    On crée un fichier vide à l'url via la méthode create()
    On inscrit les données d'initialisations dans le fichier via updateNew()
    Fin
    Catch
    Début

    Erreur, il faut créer le fichier pour pouvoir l'utiliser
    Fin
    Finally
    Début

    On initialise uniquement les champs d'initialisation via updateExists()
    Fin
    Ou je me trompe ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Classe OpenGL : quelques soucis avec un champ image
    Par sphynxounet dans le forum WinDev
    Réponses: 14
    Dernier message: 08/01/2010, 09h58
  2. Quelques soucis avec un lecteur MP3
    Par Guesh13 dans le forum Audio
    Réponses: 3
    Dernier message: 20/02/2006, 14h57
  3. [POSTGRES 8] [INSTALLATION] [DEBIAN] Quelques soucis
    Par julienOriano dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 24/06/2005, 10h55
  4. [Swings]Quelques soucis à l'affichage !
    Par julienOriano dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 23/09/2004, 13h22
  5. quelques soucis avec word 2000
    Par ramchou dans le forum Word
    Réponses: 3
    Dernier message: 06/09/2004, 18h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo