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

AWT/Swing Java Discussion :

Fenetre vide


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Par défaut Fenetre vide
    Bonjour,

    J'ai un soucis avec les interfaces graphiques (SWING) qui commencent à me ... enfin bref.

    De façon générale, il arrive que mes fenêtres apparaissent, mais vides ; j'ai bien le border avec la croix pour fermer, mais sans contenu, ni titre de fenêtre.

    Celà arrive de temps en temps (je n'ai pas remarqué de cycles ou d'éléments déclenchant ce problème), que ce soit pour des fenêtre contenant que deux JButton ou beaucoup plus complexes, et même pour des popup (JOptionPane.showMessageDialog...).
    De plus, ce problème apparait aussi bien quand je code (sous Eclipse) que lorsque je l'exécute directement du jar (sous Windobe ou Linux).

    Au point de vue ressource, mon processeur (Core 2 duo à 1.66Ghz) est utilisé qu'à hauteur de 12% et la RAM (2Go) à hauteur de 40%, ce qui me laisse à penser que le problème ne vient pas de là.

    A titre indicatif, je suis sous Linux (Ubuntu 7.10).


    Si quelqu'un a une idée ...

  2. #2
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Peut-être tu fais beaucoup de choses hors de l'EDT, ce qui provoque de gros problèmes. Renseigne toi sur l'Event Dispatch Thread.

  3. #3
    Membre confirmé Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Par défaut
    Salut,

    J'ai changé un peu ma manière d'instancier mes objets (graphiques surtout) pour ne pouvoir faire le JFrame.pack en dernier (enfin, être sur surtout).

    Le problème ne se posant plus, j'ai supposé que c'était bon. Or cela est revenu, certes moins souvent, mais c'est revenu peu de temps après.

    Du coup, j'ai une question (peut-être idiote) :
    si j'ai des JOptionPane, faut-il les instancier également des le début (et donc avant mon JFrame.pack), ou cela n'a aucune incidence, ou faire une sorte de SwingUtilities.invokeLater(JOptionPane); ??

    Merci d'avance

  4. #4
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Citation Envoyé par Paniez Voir le message
    si j'ai des JOptionPane, faut-il les instancier également des le début (et donc avant mon JFrame.pack), ou cela n'a aucune incidence
    La méthode pack() utilise tous les éléments présents dans l'affichage pour redimensionner la fenêtre, donc si les JOptionPane doivent être présents dans l'affichage, il faut les placer avant l'appelle de pack().

    Citation Envoyé par Paniez Voir le message
    ou faire une sorte de SwingUtilities.invokeLater(JOptionPane);
    SwingUtilities.invokeLater permet de placer un Objet runnable dans le thread qui gère l'affichage, donc "SwingUtilities.invokeLater(JOptionPane);" ne veut rien dire (ça ne doit même pas passer la compilation).

    Quant-à ton problème d'affichage, ça ressemble plus à un simple de problème de dimension de fenêtres non renseignées. Tu peux faire un setSize après chaque initialisation de chaque fenêtre, elles auront au moins une taille d'affichage par défaut.

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Qui dit ubuntu dit Compiz, qui dit Compiz me fait dire de mettre à jour ta version de java pour la dernière update de java 6 (ou alors d'utiliser IcedTea en tant que version de java).

    Compiz a posé à son apparition pas mal de problème avec AWT/Swing

  6. #6
    Membre confirmé Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Par défaut
    Citation Envoyé par sinok Voir le message
    Qui dit ubuntu dit Compiz, qui dit Compiz me fait dire de mettre à jour ta version de java pour la dernière update de java 6 (ou alors d'utiliser IcedTea en tant que version de java).

    Compiz a posé à son apparition pas mal de problème avec AWT/Swing
    Salut,
    Côté java, je suis en java version "1.6.0_03" ; de plus, ce problème apparait également sous windobe ... (du coup, je doute de cette piste).

    Sinon, j'ai commencé à regarder l'EDT ; je dois changer/bouger pas mal de code (vu que j'instanciais certaines choses qu'à un certain moment, et non pas avant le Jframe.pack ), je fais ça au fur et à mesure.

  7. #7
    Membre confirmé Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Par défaut
    Bonjour,

    Je me permets de dépoussiérer ce post.
    Depuis le précédent post, je pense que mon code est plus "propre" ou conforme pour l'EDT.

    Cela ne règle pourtant pas ce problème ; certes, il apparaît nettement moins fréquemment, mais il persiste.
    De plus, à un certain moment, j'ai fait une boite de dialogue (une JOptionPane.showInputDialog avec un JTextfield pour être précis) qui ré-apparaît si l'entrée saisie n'est pas conforme (null, longueur trop courte, ...). Il s'avère que celle-ci appraraît avec le même problème (j'ai bien le border, mais sans le moindre contenu) pas nécessairement la première fois, ou la seconde ou la i-ème fois (de façon assez aléatoire, du moins, je n'ai pas trouvé de "fréquence"). De ce fait, il suffit d'appuyer sur "entrée" et comme l'entrée n'est pas conforme, elle ré-apparaît "normalement".
    Du coup, je pencherais plus pour le fait que l'EDT n'a pas le temps de faire le réaffichage, et de ce fait, peut-être qu'un simple "sleep" suffirait ; qu'en dites-vous ??


    Merci par avance

    PS : J'ai également constaté ce problème avec une JFrame contenant juste une boite de dialogue .....

  8. #8
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Je pense qu'il faudrait voir ton code...

    a++

    PS : Surtout pas de "sleep" dans l'EDT !!!

  9. #9
    Membre confirmé Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Par défaut
    Re,

    Bon, du code alors (c'est assez simple) :

    J'ai une JFrame avec un bouton, lors du clic j'ouvre un JFileChooser, puis un traitement (je parcours un vector pour tester l'existence du fichier dans ce vector) et s'il n'existe pas, j'appelle cette méthode qui consiste à saisir le nouveau nom du fichier (je fais un copie physique de ce fichier avec le nouveau nom) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public String correspondance(String sMess,String _f)
    {
    String sRes ="";
     
    while(sRes == null || sRes.length() == 0 || sRes.trim().length() == 0)
    sRes = (String)JOptionPane.showInputDialog(monContenu.getMP(),sMess,"Erreur",JOptionPane.QUESTION_MESSAGE);
     
    return sRes;
    }
    Comme vous pouvez le voir, c'est juste une boucle qui s'arrete lorsque la saisie est cohérente (enfin, tout est relatif).

    Le probleme est que ce "JOptionPane.showInputDialog", dans certains cas, apparait qu'avec les bordures, sans aucun contenu ; comme c'est une boucle, il suffit de faire "entrée", et c'est bon.

    Voili-voilou

  10. #10
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 897
    Billets dans le blog
    54
    Par défaut
    Trop court, on ignore totalement dans quel context de Thread ceci est utilise, montre-nous un exemple pleinement fonctionnel ou ce probleme est apparant (incluant un main() donc).

    Et si le probleme persiste malgre un code "normal" (ca on en decidera) essaie directement la JVM de Sun, laisse tomber ces trucs "libres" pas vraiment compatibles ni totalement finalises pour le moment.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  11. #11
    Membre confirmé Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Par défaut
    Bonjour,

    Je viens de faire un petit code :
    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
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
     
    public class jfSaisie extends JFrame implements ActionListener
    {
     
    	public jfSaisie()
    	{
    		JButton jb=new JButton("clic");
    		jb.addActionListener(this);
    		this.add(jb);
    	}
     
     
    	public static void main(String[] args)
    	{
    		jfSaisie jfs=new jfSaisie();
    		jfs.setVisible(true);
    		jfs.pack();
     
    	}
     
     
    	public void actionPerformed(ActionEvent arg0)
    	{
    		for(int i=0;i<1000;i++)
    			System.out.println("coucou_"+i);
     
    		System.out.println("Valeur: "+correspondance("coucou"));
    	}
     
     
    	public String correspondance(String sMess)
    	{
    		String sRes ="";
     
    		while(sRes == null || sRes.length() == 0 || sRes.trim().length() == 0)
    			sRes = (String)JOptionPane.showInputDialog(null,sMess,"Erreur sur le fond",JOptionPane.QUESTION_MESSAGE);
     
    		return sRes;
    	}
     
    }
    Sur ce code simple, il arrive que, une fois la popup ouverte (et que l'on appuie sur entrée pour simuler une mauvaise entrée), il arrive que cette même popup s'affiche sans contenu.
    Du coup, ça proviendrait du fait de ma boucle for juste avant (histoire de simuler un pseudo-traitement) ; mais alors, pourquoi ça le fait que par moment - vu que ma boucle for est avant, pourquoi ça bloque sur cette popup instancier après - faut-il passer absolument par un "SwingUtilities.invokeLater" ?


    Merci d'avance

  12. #12
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 897
    Billets dans le blog
    54
    Par défaut
    Aucun probleme pour moi tant sous XP SP2 32bits que sous CentOs 5 64bits avec le dernier JRE en date (1.6.0_10).

    Le code est correct meme si l'initialisation de la fenetre principale n'est pas dans l'EDT. Cependant la gestion de la boite de dialogue est bien dans l'EDT et donc ne devrait pas mener a de tels blocages.
    La il faut voir au niveau des bugs du JRE que tu utilises (puisque ton probleme apparait a la fois sur Linux et Windows).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  13. #13
    Membre confirmé Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Par défaut
    Citation Envoyé par bouye Voir le message
    La il faut voir au niveau des bugs du JRE que tu utilises (puisque ton probleme apparait a la fois sur Linux et Windows).
    Re,

    Je développe avec la version 1.6 de la JRE (pour l'utilisation des Map par exemple). Sur ma machine de dev, je suis à l'update 3 (donc, version 1.6.0_03) et teste aussi avec la dernière version update 10 (d'ailleurs qui m'a valu certaines surprises, mais m'a imposé encore plus de rigueur, donc tant mieux) et j'arrive avoir ces même problèmes (peut-être faut-il augmenter un peu la boucle, je ne sais pas trop).

    Je ne sais quoi penser.

Discussions similaires

  1. une nouvelle fenetre vide se genere!
    Par amoula84 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 27/04/2009, 11h36
  2. [Forms 9.0.4] Fenetre vide avec juste le menu?
    Par Aeternus dans le forum Forms
    Réponses: 7
    Dernier message: 22/06/2007, 15h11
  3. [MacOSX] wxFileDialog Fenetre Vide
    Par AuraHxC dans le forum wxWidgets
    Réponses: 2
    Dernier message: 05/03/2007, 23h25
  4. Mega débutant, fenetre vide (swing)
    Par gloubi dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 03/08/2006, 23h59
  5. LNK1201 en voulant afficher une fenetre vide
    Par 180degrés dans le forum MFC
    Réponses: 3
    Dernier message: 18/08/2005, 00h17

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