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

Agents de placement/Fenêtres Java Discussion :

pb affichage d'un JOptionPane


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Par défaut pb affichage d'un JOptionPane
    Bonjour à tous,

    Je ne suis pas du genre à venir poser des questions, mais plutôt à chercher des réponses, seulement là je bloque vraiment, je m'explique :

    J'ai une fenêtre qui contient un oscilloscope me permettant de faire des acquisitions via une socket. Lorsque que je perds la com, au timeout de la socket je souhaite offrir la possibilité de sauvegarder l'acquisition déjà effectuée grace à une popup donnée par : JOptionPane.showConfirmDialog(.....)

    Quand je test :
    1- je me connecte
    2- je démarre l'acquisition
    3- je débranche le cable ethernet
    4- je tombe dans le timeout de la socket
    5- la popup s'affiche (stoppant ainsi temporairement l'execution de l'oscillo en attendant la réponse) et je peux sauvegarder
    6- Je réinitialise tous.
    7- Je me reconnecte, etc....

    Le problème est qu'à cette 2ième, voir n ième acquisition, la popup ne s'affiche plus, elle ne bloque plus temporairement l'execution de l'oscillo et renvoi automatiquement JOptionPane.NO_OPTION

    Suis je clair ?
    Quelqu'un a une idée ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Utiliser des threads tout en respectant l'EDT.

    Cf le cours suivant: http://gfx.developpez.com/tutoriel/j...ing-threading/

  3. #3
    Membre éclairé Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    Je suis pas sûr de comprendre, est-ce que des fois ça marche pendant plusieurs séries de connexion/déconnexion, ou alors, c'est au bout de la n(fixé)-ième fois que ça marche plus?

    Sinon, plutôt que des Thread, je pencherais plutôt vers un Timer, qui fait quelque chose (JOptionPane par exemple) à partir d'un certain délai. Donc, si tu connais la valeur du timeout, tu peux demander d'enregistrer un peu avant (je me demande si le fait que ce soit pas toujours au même nombre d'essais que ça marche plus n'est pas dû au fait qu'il ne détecte pas forcément le timeout)

  4. #4
    Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Par défaut
    Donc non, c'est systématiquement au 2ième puis 3ième, etc que ca merde, ca marche toujours au premier test (1 test = 1 acquisition + 1 perte de com).
    Un timer, je n'arrive pas vraiment à comprendre comment tu veux le faire fonctionner, car actuellement c'est justement le TimeOut qui détecte qu'on perd la com, et déclenche le processus de sauvegarde.

    Sinon pour l'EDT, il me semble avoir essayé, normalement toute l'application respecte ce fonctionnement (c'est un oscillo en Swing..... ;-) ).
    J'ai tenté de remplacer le :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (JOptionPane.showConfirmDialog(......) == JOptionPane.YES_OPTION)
    par cette méthode :

    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
      boolean confirmation() throws InterruptedException {   
        class Dialoguer implements Runnable {
          public boolean confirme;
          public void run() {
            if ( JOptionPane.showOptionDialog(.....) == JOptionPane.YES_OPTION)
              confirme = true;
            else
              confirme = false;
          }
        }
        Dialoguer dialogue = new Dialoguer();
        try {
          SwingUtilities.invokeAndWait(dialogue);
        }
        catch (java.lang.reflect.InvocationTargetException e) {
          e.printStackTrace();
        }
        return dialogue.confirme;
      }
    A l'execution ceci me retourne une exception d'invocation.
    et si je l'execute dans l'EDT mon thread oscillo se termine avant qu'il affiche la popup et donc ferme la fenetre avant de faire la sauvegarde.


    En faite ce que je ne comprends pas c'est ça:

    code A ....
    maJDialog.setVisible(true);
    code B ....

    Normalement on execute code A, puis on affiche la JDialog avant d'executer code B, et c'est seulement quand la JDialog est fermée que l'execution de code B reprend, non ???

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Par défaut
    Une balise code nous aiderait à mieux lire ton code (le '#'), merci.

    Je me demande un truc : tu la créés quand ta JOptionPane ? Ne faut-il pas la recréer à chaque fois que ta fenêtre doit s'afficher ?

  6. #6
    Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Par défaut
    Alors la methode showConfirmDialog est static, donc pas d'instance à créer.
    Mais, effectivment je m'étais posé la question et tenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    JOptionPane pane = new JOptionPane(mesOptions);
    JDialog dialog = pane.createDialog(this, "Message");
    dialog.setVisible(true);
    if ( ( (Integer) pane.getValue() ) == JOptionPane.YES_OPTION ) { sauvegarder(); }
    Mais tjr le meme pb, cad: à la premiere execution du code la JDialog s'affiche, le code se fige puis reprend apres que l'utilisateur est cliquer sur un bouton de la JDialog. Mais à la deuxième execution le setVisible() n'arrete plus le code, impossible donc caster getValue() en Integer -> Exception -> mon oscillo se termine -> pas de sauvegarde....

Discussions similaires

  1. [JOptionPane] Question sur l'affichage d'un MessageDialog
    Par Nanawel dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 04/05/2007, 00h06
  2. Affichage d'un JOptionPane au cours de l'exécution d'un Thread
    Par azad_892000 dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 20/03/2007, 22h23
  3. Pb affichage avec un PaintBox (pour eviter scintillement)
    Par juan64 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/04/2004, 09h21
  4. probléme d'affichage d'une fiche
    Par sb dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 09h43
  5. Affichage en passant par un buffer...
    Par Sirotilc dans le forum MFC
    Réponses: 5
    Dernier message: 27/05/2002, 21h00

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