JOptionPane.showInputDialog() ne veux pas partir

JOptionPane.showInputDialog() ne veux pas partir - Java - Programmation

Marsh Posté le 19-05-2004 à 00:09:18    

Bonjour,
 
J'ai une méthode qui s'occupe de récupérer une chaine de caractere saisie au clavier par l'utilisateur, ceci à l'aide d'un JOptionPane. Quelque chose dans ce genre :
 
while (s==null || s.length() == 0) {
s = JOptionPane.showInputDialog(c,"Entrer votre nom :" );
}
 
 
Pourquoi cette boite de dialogue s'affiche presque tous le temps deux fois de suite ?

Reply

Marsh Posté le 19-05-2004 à 00:09:18   

Reply

Marsh Posté le 19-05-2004 à 00:19:37    

je dirais que ca vient du while...à tout les coups le truc qui l'execute se lance X fois, et des fois il doit arriver que les conditions du while se vérifie 2x de suite...
 
essaye avec un if...pis tes conditions font un peu doublon : si une chaine est nulle, sa length est de 0, et vice versa...


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 19-05-2004 à 00:29:18    

Jubijub a écrit :

à tout les coups le truc qui l'execute se lance X fois


 
Apres verification il s'agit bien du truc qui lance qui s'execute deux fois, cette portion de code n'est donc pas incriminé :)
 
Merci pour m'avoir aidé a resoudre le probleme !
 

Jubijub a écrit :

pis tes conditions font un peu doublon : si une chaine est nulle, sa length est de 0, et vice versa...


Es tu sur de ca ?! A mon avis, ce n'est pas pareil dans un sens comme dans l'autre.


Message édité par souliane le 19-05-2004 à 00:35:26
Reply

Marsh Posté le 19-05-2004 à 00:38:44    

explique moi bien pourquoi...
 
une string à null possède 0 char, donc sa length est 0... = "" si tu préfères...
 
maintenant, une string ne contenant aucun char est nulle...
 

Citation :


length
 
public int length()
 
    Returns the length of this string. The length is equal to the number of 16-bit Unicode characters in the string.


 
Tiré de la Javadoc 1.4.2
 
--> pour une raison X, ton while s'execute 2x...essaye avec un IF : si le bug persiste, c que ton truc est appellé 2x...sinon, c que c le while qui s'execute 2x, et que donc les conditions du while ne changent pas assez vite pour éviter ça...


Message édité par Jubijub le 19-05-2004 à 00:39:10

---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 19-05-2004 à 00:52:11    

> une string à null possède 0 char, donc sa length est 0... = "" si tu
> préfères... maintenant, une string ne contenant aucun char est
> nulle...
 
Une String à null possède zéro caracteres parsqu'elle n'existe pas. En appelant length() on se retrouve avec un NullPointerException.
 
 
> pour une raison X, ton while s'execute 2x...essaye avec un IF : si le
> bug persiste, c que ton truc est appellé 2x...
 
Oui c'était ça.

Reply

Marsh Posté le 19-05-2004 à 00:55:46    

souliane a écrit :

> une string à null possède 0 char, donc sa length est 0... = "" si tu
> préfères... maintenant, une string ne contenant aucun char est
> nulle...
 
Une String à null possède zéro caracteres parsqu'elle n'existe pas. En appelant length() on se retrouve avec un NullPointerException.
 
 
> pour une raison X, ton while s'execute 2x...essaye avec un IF : si le
> bug persiste, c que ton truc est appellé 2x...
 
Oui c'était ça.


 
--> oui donc c pas la peine de tester les 2, l'un impliquant l'autre...Teste tu verras...
 
--> ct sur et certain le coup du while (pour tout dire j'ai eu le bug de matin même, donc ct frais dans ma tete :D ;) )


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 19-05-2004 à 01:13:23    

> oui donc c pas la peine de tester les 2, l'un impliquant
> l'autre...Teste tu verras...
 
Mmmm... et tu as testé toi ? :)
Moi oui ben c'est pas comme tu dis !
 
Voila exactement comment ca marche :
 
String a = "";
if(a==null)
  System.out.println("a est null" );
else
  System.out.println("a est pas null" );
String b = null;
  System.out.println(b.length());
 
Ca ecrit "a est pas null" et java.lang.NullPointerException

Reply

Marsh Posté le 19-05-2004 à 01:21:46    

Jubijub a écrit :

explique moi bien pourquoi...
 
une string à null possède 0 char, donc sa length est 0... = "" si tu préfères...
 
maintenant, une string ne contenant aucun char est nulle...

heeeeeeeerrk
 
 
CECI EST UNE VASTE CONNERIE garde ton test.
 
faire null.lenght() lève une NullPointerException (appelée NPE dans l'intimitée).
 
par contre, avec le test s == null || s.length() == 0, on est sûr qu'il n'y aura pas de NPE, car le || est spécifié comme "à court circuit" dans la référence :
http://java.sun.com/docs/books/jls [...] html#54532
 


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 19-05-2004 à 08:46:16    

Jubijub a écrit :


essaye avec un if...pis tes conditions font un peu doublon : si une chaine est nulle, sa length est de 0, et vice versa...


 
Aaaaaah, quelle horreur!! Non mais ça va pas????
 
Quand tu fais  
 
String s = "";
 
ben s != null;
et s.length() == 0 est vrai!!
 
Alors que String s;
s == null est vrai,
s.length() --> NullPointerException.
 
non mais.
 
Edit : oups, y'avait déjà nraynaud qui avait réagi! :p J'ai pas lu tout le post, je me suis arrêté à l'imfamie! :D


Message édité par gfive le 19-05-2004 à 08:47:25
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed