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

EDT/SwingWorker Java Discussion :

JFrame vide jusqu'à obtention d'une réponse d'un WebService ?


Sujet :

EDT/SwingWorker Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 254
    Par défaut JFrame vide jusqu'à obtention d'une réponse d'un WebService ?
    Bonjour,

    J'ai un JFrame qui me sert à afficher des informations qui servent à la validation de n° de TVA via le WebService de la communauté européenne.

    Dans le constructeur de la classe j'initialise la variable de n° de TVA et j'ai une méthode de validation qui affiche des informations, se connecte au WebService et affiche le résultat.

    Tout cela fonctionne parfaitement mais j'ai un phénomène bizarre...Dans la méthode de validation, avant la connexion je mets dans un JTextField un message d'information ("Connection au service de validation"). Mais la JFrame ne contien rien (JFrame totalement vide, j'ai juste le bord) jusqu'à la réponse du WebService...et là tout s'affiche d'un coup.

    J'ai essayé sans connection automatique (via un JButton) là pas de soucis d'affichage. Mais je voudrais que la validation se fasse automatiquement.

    Si qlq a une idée...là je sèche...

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Donne ton code. Il est fort probable que tout le code soit dans le Thread du listener, l'EDT.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 254
    Par défaut
    Voici le code de la classe
    Fichiers attachés Fichiers attachés

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Euh... donne plutôt le code minimal qui permet de reproduire le problème
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 254
    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
    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
        public void isTvaValide(boolean gui) {
     
            boolean             resultat        = false;
            GregorianCalendar   dateValidation  = new GregorianCalendar();
     
            jTextFieldStatusTva.setText("Connection au service de validation");
     
            jLabelStatusService.setText("");
            GuiDétails.setText("", jTextFieldNom, jTextFieldAdresse1, jTextFieldAdresse2);
     
            setVisible(gui);
     
            try {
                CheckVatService     service     = new CheckVatService();
     
                if(!gui) System.out.println("Initialisation du service : " + service.getServiceName());
     
                CheckVatPortType port = service.getCheckVatPort();
     
                Holder<String> countryCode = new Holder<String>(codeIsoPays);
                Holder<String> vatNumber = new Holder<String>(tva);
     
                Holder<XMLGregorianCalendar> requestDate = new Holder<javax.xml.datatype.XMLGregorianCalendar>();
                Holder<Boolean> valid = new Holder<java.lang.Boolean>();
                Holder<String> name = new Holder<java.lang.String>();
                Holder<String> address = new Holder<java.lang.String>();
     
                port.checkVat(countryCode, vatNumber, requestDate, valid, name, address);
     
                jTextFieldStatusTva.setText("");
     
                if(!gui){
                    System.out.println("countryCode :" + countryCode.value);
                    System.out.println("  vatNumber :" + vatNumber.value);
                    System.out.println("requestDate :" + requestDate.value);
                    System.out.println("      valid :" + valid.value);
                    System.out.println("       name :" + name.value);
                    System.out.println("    address :" + address.value);
                }
     
                jTextFieldNom.setText(name.value);
     
                // Traitement de l'adresse qui est en 2 lignes séparé par le code 10 (return)
                boolean adr2 = false;
                for (int i = 0; i < address.value.length(); i++) {
                    char c = address.value.charAt(i);
     
                    // on bascule sur le jTextFieldAdresse2 dès que l'on rencontre le code 10(return)
                    if(!adr2 && c==10) adr2 = true;
     
                    if(!adr2) jTextFieldAdresse1.setText(jTextFieldAdresse1.getText() + c);
                    else if(c!=10) jTextFieldAdresse2.setText(jTextFieldAdresse2.getText() + c);
                }
     
                resultat = valid.value;
                jButtonRéessayer.setEnabled(!resultat);
     
            }catch(javax.xml.ws.soap.SOAPFaultException ex){
                jTextFieldStatusTva.setText(bundleLabels.getString("N°Tva") + " ?");
     
                // les message d'erreur est entouré de ' alors on on nettoie
                String err = ex.getMessage();
                if(!gui) System.out.println("err = " + err);
     
                String errNettoyée = "";
                if(err.indexOf('\'')!=0){
                    errNettoyée = err.substring(err.indexOf('\'')+1, err.lastIndexOf('\''));
                    if(!gui) System.out.println("Erreur : " + errNettoyée);
                }
     
                switch(Validation.erreurValidationTva.valueOf(errNettoyée)){
                    case INVALID_INPUT:
                        jLabelStatusService.setText(bundleLabels.getString("Entrée_Invalide"));
                        break;
                    case MS_UNAVAILABLE:
                        jLabelStatusService.setText(bundleLabels.getString("Service_Pays") + " " + codeIsoPays + " " + bundleLabels.getString("Indisponible"));
                        break;
                    case SERVER_BUSY:
                        jLabelStatusService.setText(bundleLabels.getString("Service") + " " + bundleLabels.getString("Surchargé"));
                        break;
                    case SERVICE_UNAVAILABLE:
                    case TIMEOUT:
                        jLabelStatusService.setText(bundleLabels.getString("Service") + " " + bundleLabels.getString("Indisponible"));
                        break;
                    default:
                        break;
                }
            }catch(javax.xml.ws.WebServiceException ex) {
                jTextFieldStatusTva.setText(bundleLabels.getString("N°Tva") + " ?");
                jLabelStatusService.setText(bundleLabels.getString("Connexion_Internet_Impossible"));
            }catch(Exception ex) {
                GuiUserCom.erreur(ex);
            }finally{
                if (resultat){
                    jTextFieldStatusTva.setText(bundleLabels.getString("N°Tva") + " " + bundleLabels.getString("Valide"));
                    dateValidation.setTime(new Date());
                }else{
                    if(jLabelStatusService.getText().isEmpty()) jTextFieldStatusTva.setText(bundleLabels.getString("N°Tva") + " " + bundleLabels.getString("Invalide"));
                    dateValidation = null;
                }
                Options.validationTVA = resultat;
                Options.dateValidationTVA = dateValidation;
                if(!gui) dispose();
            }
        }

  6. #6
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par dinobogan Voir le message
    Euh... donne plutôt le code minimal qui permet de reproduire le problème
    Code minimal et compilable, bien sûr
    Sinon, comme prévu, tu effectues l'appel au serveur dans l'EDT (je te laisse faire des recherches sur ce Thread qui gère entre autre l'interface graphique). La méthode "isTvaValide" doit être exécutée dans un Thread à part, sinon tu bloques l'interface graphique jusqu'à la sortie de la méthode.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  7. #7
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 254
    Par défaut
    Effectivement, en mettant l'appel au service Web dans un Thread à part cela fonctionne parfaitement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      new Thread(new Runnable() {
          public void run() {
            isTvaValide()
          }
      }).start();
    Merci dinobogan de m'avoir mis sur la voie.

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

Discussions similaires

  1. [MySQL] réponse vide à l'interrogation d'une table
    Par laurentSc dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/11/2014, 22h27
  2. Comment recevoir rapidement une réponse à votre question ?
    Par Community Management dans le forum Windows
    Réponses: 3
    Dernier message: 17/08/2014, 02h28
  3. [PHP 5.4] trouver le mot dans une réponse en XML (webservice REST)
    Par aspkiddy dans le forum Langage
    Réponses: 7
    Dernier message: 31/01/2014, 10h15
  4. acceder au xml d'une réponse d'un webservice
    Par longuard dans le forum Services Web
    Réponses: 1
    Dernier message: 09/08/2012, 19h50
  5. [JFrame] Pas moyen d'avoir une fenetre active
    Par deedji dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 24/05/2004, 16h08

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