# Java > Interfaces Graphiques en Java > AWT/Swing >  SwingUtilities.invokeLater :  quoi a sert ?

## ANOVA

Bonjour, 

j'essaie de comprendre comment on fait pour crer une interface graphique en java. J'ai donc dcid de suivre le cours de Baptiste Witch. 

Or voil le code qu'il propose pour crer une fenetre : 




> package dvp.swing.bases.fenetres;
> 
> import javax.swing.JDialog;
> import javax.swing.SwingUtilities;
> 
> public class TestJDialog {
> 	public static void main(String[] args) {
> 		SwingUtilities.invokeLater(new Runnable(){
> 			public void run(){
> ...


J'avoue qu'en voyant a je ne comprend rien. On dclare des mthodes dans des mthodes et on dclare mme une mthode dans l'argument d'une autre mthode :8O: . Donc j'ai tent de simplifier a de faon  ce que je comprenne ce que je fait. Parce que le code qu'il propose fonctionne, mais je ne comprend pas pourquoi et je ne veux pas utiliser un code que je ne comprend pas. J'ai donc russi  obtenir exactement le mme rsultat en simplifiant de la manire suivante : 




> import javax.swing.JDialog;
> 
> public class Fenetre {
> 
> 			public static void main(String[] a){
> 
> 					Fenetre(300, 200);
> 
> 			}		
> ...


L, c'est un code que je comprend et qui fait la mme chose. Du moins, je pense, mais je m'interoge quand mme parce que si l'auteur du tutorial a mis toutes les commandes que j'ai enleves, il doit y avoir une raison. 

Mes questions sont donc les suivantes : 

A quoi sert le SwingUtilities.invokeLater et l'import qui va avec ?Peut on m'expliquer un peu le fonctionnement du code du tutorial ? Quelle mthode fait quoi ? et pourquoi s'imbriquent elles de cette faon ?Pourquoi faire si compliqu quand on peut faire simple ?

Merci.

----------


## krachik

Bonjour
juste avant de te donner les explications que tu souhaites avoir j'espere que tu as deja lu un cours sur les Threads ou les Interfaces,Sinon a va etre un peu plus difficile a comprendre(quoique rien n'est difficile dans la vie)

1-


> # A quoi sert le SwingUtilities.invokeLater et l'import qui va avec ?


-d'abord coup d'oeil ici 
Quand on cre un composant un thread specifique est charger de la gestion des evenements et  partir du moment ou notre composant est visible toutes les modofications affectant ce composant doit etre faite par ce thread et c'est la qu'intervient notre classe * SwingUtilities* o SwingUtilities.invokeLater utilise le "dispatchEventThread" pour faire ce dont je viens de parler .



> On dclare des mthodes dans des mthodes et on dclare mme une mthode dans l'argument d'une autre mthode.


Quand on implemente une interface on se doit de redefinir des methodes            spcifiques associs et *Runnable* est une interface  et dans ce cas il faut redefinir la methode "run",a veut dire qu'il auraitpu faire


```

```

2-vu que tu debute les interfaces graphiques  ::?: 
3-


> Pourquoi faire si compliqu quand on peut faire simple ?


Certainement pas pour s'amuser  ::aie:: (et en meme temps pas si compliqer que a)
Tiens voila un exemple :j'ecris un code pour saisir un entier et l'afficher(vite fait)
ce dont il faut s'attendre c'est si l(utilisateur entrer un caractere ou une chaine de caractere ou un double ) que se passe t'il se cas?c'est juste de la rigueur et du contrle
Revenons  notre histoire,on pourait enveler cette partie du code comme tu l'a fait  mais dans un gros code tu aurais une erreur du genre



> Exception in thread "AWT-EventQueue-2" ........................


 qui ne risque pas d'arreter le fonctionnement de ton appli
j'espere que j'ai t quand un peu clair
@+

----------


## ANOVA

ok, je vais un peu me renseigner sur les threads car si j'ai bien compris, c'est un pr requis pour comprendre ce que je cherche  comprendre. 

Merci de ta rponse. Je reviendrai surement poser d'autres questions lorsque j'aurai lu le tuto sur les threads.

----------

