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

Langage Java Discussion :

Fonction non bloquante


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 90
    Par défaut Fonction non bloquante
    Bonjour,


    j'ai une question peut etre bizarre :


    je veux mettre en place une fonction non bloquante. c'est à dire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public FTP( ) {
    
      boolean connecter( );
      void signalerErreurParMail();
      ...
    }
    je voudrais que lorsque connecter() génère une exception, la fonction FTP() continue à s'exécuter sans tenir compte du résultat de connecter(). L'idéal serait que connecter() retourne false.

    Ainsi l'erreur de connection est signalée par mail.

    Est ce possible ? (peut etre en capturant les exceptions)

    Merci.

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Par défaut
    Effectivement, en try/catchant la fonction "connecter", tu peux gérer les exceptions susceptibles d'être lancées par la fonction "connecter", tu peux continuer ton code juste après, même en cas d'erreur.

  3. #3
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Qui fait la méthode connecter ? En tous les cas ce n'est à ma connaissnce pas une méthode du JDK. Si c'est toi qui la fait, si pour toi l'idéal est qu'elle renvoie false, fais le ainsi. Quel est le problème ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 90
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private FTPClient ftp = null;
     
    private boolean connecter() {
            // Affichage swing
            ecran.afficher("Connexion au FTP..");
     
            // Connexion au FTP
            ftp = Ftp.connectionFTPSauv();
            ...
            ...
    }
    C'est un gros projet existant sur lequel je travaille (stage). Chaque fonction fait appel à une autre, il y en a 5 en tout(connecter() -> connectionFTPSauv() -> A () -> B() -> C () ).

    - Dois-je faire remonter les exception(throw) à la fonction connecter et les traiter(try..catch) dans connecter () ?
    - Ou traiter les exceptions là ou elles sont levées ?

    Au fait après avoir amélioré le système, je suis censé faire des tests (simuler des erreurs de connection ...) et là je m'y perd!!
    Donc quelle est la stratégie ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut
    la stratégie est la suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    try {
       // connection
    }
     
    catch {
      // la connection s'est mal passée
    }
    finally {
      // fermer la connection qu'elle se soit bien ou mal passée 
    }
    l'instruction finally te permet de fermer tout proprement même si ça a planté

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 90
    Par défaut
    Citation Envoyé par LittleBean Voir le message
    la stratégie est la suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    try {
       // connection
    }
    catch {
      // la connection s'est mal passée
    }
    finally {
      // fermer la connection qu'elle se soit bien ou mal passée 
    }
    l'instruction finally te permet de fermer tout proprement même si ça a planté
    Ok ! c'est noté.

    Mais ça ne répond qu'à moitié pas à ma question (plus haut) (selon quoi est ce que je choisit de remonter l'exception ou la traiter ?)

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Par défaut
    C'est une question de conception. En général je résume la question à ça:
    - Ta fonction est-elle capable de prendre les décisions pour gérer l'exception?

    En clair si ta connexion ne fonctionne pas, tu voudras probablement renvoyer un message d'erreur à un utilisateur.

    Dans ce cas, la fonction de connexion devra probablement laisser passer l'exception à la fonction appelante pour que celle-ci se charge de reprendre.

    Sinon tu peux aussi utiliser le retour booléen de la fonction pour signaler une erreur (renvoyer false), auquel cas tu préféreras catcher l'erreur. C'est un choix.

    Tu peux même faire un mix des deux en fonction de l'erreur (par exemple si c'est un problème de serveur introuvable, tu ne feras pas la même chose que pour un mauvais login).

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/09/2005, 12h47
  2. Rendre la lecture non bloquante
    Par Charlinecha dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 05/07/2005, 15h46
  3. Le linker ignore les fonctions non implémentées
    Par Rodrigue dans le forum C++Builder
    Réponses: 5
    Dernier message: 02/03/2005, 13h31
  4. Réponses: 3
    Dernier message: 16/03/2004, 16h42
  5. [API] Communication série NON-bloquante : OVERLAPPED/Thread
    Par Rodrigue dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/11/2003, 13h43

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