J'ai un petit problème qui, me semble très étrange. Bref dans mon appli j'ai un Thread qui tourne en même temps que le main, et qui exécute ce code :
public void run() {
while((running)){
if(pane.getSelectedComponent() == pan){
up = new Updater(frm);
running = false;
}
}
}
Voilà tout marche sur Eclipse : je suis content, je l'exporte en .jar comme d'habitude tout marche sauf ce Thread qui ne tourne pas ! Je lance donc la console avec, mais il me retourne aucune erreur, juste rien ne se passe. Donc je rajoute un
system.out.println("test");
ici
public void run() {
while((running)){
System.out.println("test");
if(pane.getSelectedComponent() == pan){
up = new Updater(frm);
running = false;
}
}
}
Et la miracle, je le réexporte et ça marche. J'ai testé le syso avant la while : ça marche pas, c'est juste la while qui décone.
Mais le plus bizarre c'est que quand je teste le .jar sur un autre ordi, sans le System.out.println("test'), ça fonctionne à merveille. Avec le même système d'exploitation : Windows 7 Edition Familiale Premium, la même version de java...
Ce n'est pas parce que tu as un "test" qui s'affiche en boucle que cela signifie que cela fonctionne ! Sans le System.out tu ne vois rien ... parce qu'il n'y a rien a afficher, et pourtant cela boucle quand même.
Tu n'expliques pas ton problème, ce que tu dois obtenir : est-ce que cela boucle à l'infinie ? cela devrait-il s'arrêter selon un événement ? le test dans le if qui ne fonctionne pas (normal, car la comparaison d'objets se fait via .equals()) ?
Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
J’ai une boucle infinie, tant que la condition n’est pas vérifié (pour les .equals() tu as raison j’avais oublié, pourtant les == marchent tout de même), c’est à dire que dans mon appli j’ai un JTabbedPane avec des onglets, et je veux savoir quand l’utilisateur est sur l’onglet qui contient le JPanel pan. Après, quand la condition a retourner vrai la boucle s'arrête.
Sur Eclipse la condition s’exécute correctement (même avec les == ), or dans le .jar la condition s'exécute correctement que quand je rajoute le "test", mais sinon non.
Je doute fortement qu'un System.out change le comportement d'une égalité. A mon avis le problème vient d'ailleurs.
Le == et le equals() ont le comportement si et seulement si la méthode equals() n'est pas surchargée, car par défaut le test est this == obj. Dans Swing les composants n'ont pas surchargés equals(), donc utilisent la méthode native de la classe Object, et donc utilisent ==. Mais bon sauf cas hyper spécifique, la comparaison d'objets doit se faire avec equals().
Utiliser une boucle infinie dans un Thread parallèle est une double mauvaise idée :
La boucle infinie utilise des ressources pour rien : thread à 100%. Ajouter un Thread.sleep() n'est pas la solution non plus, car imaginons que tu mettes une pause de 2sec, et que tu changes de composant 2 fois en moins d'1sec, tu risques de passer à côté.
La gestion des Thread est compliquée, et le risque de plantage est élevé : oublier de l'arrêter, arrêt au mauvais moment, concurrence, ...
La solution la plus propre et simple et d'utiliser les événements. Exemple ici : http://www.java2s.com/Tutorial/Java/0240__Swing/ListeningforSelectedTabChanges.htm
Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
Ouais c'est une bonne solution, mais je comprends toujours pas comment un tel problème peut arriver !
Merci, quand même.
Le java, c'est cool !
Une while qui bug !
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le java, c'est cool !
Le java, c'est cool !
Le java, c'est cool !