Bonsoir,
Au détour de mes lectures sur les threads, je suis tombée sur les
méthodes invokeLater() et invokeAndWait() de la classe SwingUtilities.
Ainsi, je me rends compte que tous les programmes que j'ai pu écrire en
swing était erroné (moindre mal car c'était juste pour l'école, et pas
pour de la production ;)):
Supposons:
public class Main {
public static void main(String[] argv){
MaFenetre f = new MaFenetre();
f.setVisible(true);
}
}
class MaFenetre extends JFrame {
MaFenetre() {
// ajout des composants dans le container + listeners
}
}
Puisque le code du constructeur MaFenetre() agit sur les composants
swing, il doit donc être exécuté dans l'EDT plutôt que dans le thread
principal, et on devrait donc écrire la méthode main ainsi :
public static void main(String[] argv){
SwingUtilities.invokeLater(new Runnable() {
public void run() {
MaFenetre f = new MaFenetre();
f.setVisible(true);
}
});
}
Peut-on me confirmer que la 2nde version est bien la bonne? Et si oui,
concrètement, quels risques y a-t-il avec la 1ere version?
Merci d'avance,
Mei.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Raphael Tagliani
Regarde la doc sur SwingWorker, c'est un peu plus simple à utiliser, et ça fait la même chose. Tu peux avoir une explication complète dans le 'java swing tutorial' si tu veux connaître les détails. En gros, l'un des effets de bords très courant, c'est de cliquer sur un bouton et de devoir attendre le retour d'une action pour pouvoir intéragir avec le reste de l'appli. D'autres effets sont plus gênants, ils sont décrits dans le tuto de sun.
Bonsoir, Au détour de mes lectures sur les threads, je suis tombée sur les méthodes invokeLater() et invokeAndWait() de la classe SwingUtilities. Ainsi, je me rends compte que tous les programmes que j'ai pu écrire en swing était erroné (moindre mal car c'était juste pour l'école, et pas pour de la production ;)): Supposons: public class Main { public static void main(String[] argv){ MaFenetre f = new MaFenetre(); f.setVisible(true); } }
class MaFenetre extends JFrame { MaFenetre() { // ajout des composants dans le container + listeners } }
Puisque le code du constructeur MaFenetre() agit sur les composants swing, il doit donc être exécuté dans l'EDT plutôt que dans le thread principal, et on devrait donc écrire la méthode main ainsi : public static void main(String[] argv){ SwingUtilities.invokeLater(new Runnable() { public void run() { MaFenetre f = new MaFenetre(); f.setVisible(true); } }); } Peut-on me confirmer que la 2nde version est bien la bonne? Et si oui, concrètement, quels risques y a-t-il avec la 1ere version? Merci d'avance, Mei.
Regarde la doc sur SwingWorker, c'est un peu plus simple à utiliser, et
ça fait la même chose.
Tu peux avoir une explication complète dans le 'java swing tutorial' si
tu veux connaître les détails.
En gros, l'un des effets de bords très courant, c'est de cliquer sur un
bouton et de devoir attendre le retour d'une action pour pouvoir
intéragir avec le reste de l'appli. D'autres effets sont plus gênants,
ils sont décrits dans le tuto de sun.
Bonsoir,
Au détour de mes lectures sur les threads, je suis tombée sur les
méthodes invokeLater() et invokeAndWait() de la classe SwingUtilities.
Ainsi, je me rends compte que tous les programmes que j'ai pu écrire en
swing était erroné (moindre mal car c'était juste pour l'école, et pas
pour de la production ;)):
Supposons:
public class Main {
public static void main(String[] argv){
MaFenetre f = new MaFenetre();
f.setVisible(true);
}
}
class MaFenetre extends JFrame {
MaFenetre() {
// ajout des composants dans le container + listeners
}
}
Puisque le code du constructeur MaFenetre() agit sur les composants
swing, il doit donc être exécuté dans l'EDT plutôt que dans le thread
principal, et on devrait donc écrire la méthode main ainsi :
public static void main(String[] argv){
SwingUtilities.invokeLater(new Runnable() {
public void run() {
MaFenetre f = new MaFenetre();
f.setVisible(true);
}
});
}
Peut-on me confirmer que la 2nde version est bien la bonne? Et si oui,
concrètement, quels risques y a-t-il avec la 1ere version?
Merci d'avance,
Mei.
Regarde la doc sur SwingWorker, c'est un peu plus simple à utiliser, et ça fait la même chose. Tu peux avoir une explication complète dans le 'java swing tutorial' si tu veux connaître les détails. En gros, l'un des effets de bords très courant, c'est de cliquer sur un bouton et de devoir attendre le retour d'une action pour pouvoir intéragir avec le reste de l'appli. D'autres effets sont plus gênants, ils sont décrits dans le tuto de sun.
Bonsoir, Au détour de mes lectures sur les threads, je suis tombée sur les méthodes invokeLater() et invokeAndWait() de la classe SwingUtilities. Ainsi, je me rends compte que tous les programmes que j'ai pu écrire en swing était erroné (moindre mal car c'était juste pour l'école, et pas pour de la production ;)): Supposons: public class Main { public static void main(String[] argv){ MaFenetre f = new MaFenetre(); f.setVisible(true); } }
class MaFenetre extends JFrame { MaFenetre() { // ajout des composants dans le container + listeners } }
Puisque le code du constructeur MaFenetre() agit sur les composants swing, il doit donc être exécuté dans l'EDT plutôt que dans le thread principal, et on devrait donc écrire la méthode main ainsi : public static void main(String[] argv){ SwingUtilities.invokeLater(new Runnable() { public void run() { MaFenetre f = new MaFenetre(); f.setVisible(true); } }); } Peut-on me confirmer que la 2nde version est bien la bonne? Et si oui, concrètement, quels risques y a-t-il avec la 1ere version? Merci d'avance, Mei.
mei
Regarde la doc sur SwingWorker, c'est un peu plus simple à utiliser, et ça fait la même chose. Tu peux avoir une explication complète dans le 'java swing tutorial' si tu veux connaître les détails.
Dans ce tutorial, ils parlent de 3 types de thread: le thread principal (qui lance l'application), l'EDT et les threads en background (ou worker thread) pour les tâches longues. Il semble que SwingWorker s'utilise pour les worker threads. Dans mon exemple, je parle plus de l'interaction entre le thread principal et l'EDT. Donc je ne suis pas sure que ce soit le meme probleme, si?
En gros, l'un des effets de bords très courant, c'est de cliquer sur un bouton et de devoir attendre le retour d'une action pour pouvoir intéragir avec le reste de l'appli. D'autres effets sont plus gênants, ils sont décrits dans le tuto de sun.
Je ne les ai pas encore vus, mais c'est vrai que je n'ai pas encore fini la lecture du tutorial ;)
Regarde la doc sur SwingWorker, c'est un peu plus simple à utiliser, et
ça fait la même chose.
Tu peux avoir une explication complète dans le 'java swing tutorial' si
tu veux connaître les détails.
Dans ce tutorial, ils parlent de 3 types de thread: le thread principal
(qui lance l'application), l'EDT et les threads en background (ou worker
thread) pour les tâches longues. Il semble que SwingWorker s'utilise
pour les worker threads.
Dans mon exemple, je parle plus de l'interaction entre le thread
principal et l'EDT. Donc je ne suis pas sure que ce soit le meme
probleme, si?
En gros, l'un des effets de bords très courant, c'est de cliquer sur un
bouton et de devoir attendre le retour d'une action pour pouvoir
intéragir avec le reste de l'appli. D'autres effets sont plus gênants,
ils sont décrits dans le tuto de sun.
Je ne les ai pas encore vus, mais c'est vrai que je n'ai pas encore fini
la lecture du tutorial ;)
Regarde la doc sur SwingWorker, c'est un peu plus simple à utiliser, et ça fait la même chose. Tu peux avoir une explication complète dans le 'java swing tutorial' si tu veux connaître les détails.
Dans ce tutorial, ils parlent de 3 types de thread: le thread principal (qui lance l'application), l'EDT et les threads en background (ou worker thread) pour les tâches longues. Il semble que SwingWorker s'utilise pour les worker threads. Dans mon exemple, je parle plus de l'interaction entre le thread principal et l'EDT. Donc je ne suis pas sure que ce soit le meme probleme, si?
En gros, l'un des effets de bords très courant, c'est de cliquer sur un bouton et de devoir attendre le retour d'une action pour pouvoir intéragir avec le reste de l'appli. D'autres effets sont plus gênants, ils sont décrits dans le tuto de sun.
Je ne les ai pas encore vus, mais c'est vrai que je n'ai pas encore fini la lecture du tutorial ;)
jlp
Regarde la doc sur SwingWorker, c'est un peu plus simple à utiliser, et ça fait la même chose. Tu peux avoir une explication complète dans le 'java swing tutorial' si tu veux connaître les détails.
Dans ce tutorial, ils parlent de 3 types de thread: le thread principal (qui lance l'application), l'EDT et les threads en background (ou worker thread) pour les tâches longues. Il semble que SwingWorker s'utilise pour les worker threads. Dans mon exemple, je parle plus de l'interaction entre le thread principal et l'EDT. Donc je ne suis pas sure que ce soit le meme probleme, si?
En gros, l'un des effets de bords très courant, c'est de cliquer sur un bouton et de devoir attendre le retour d'une action pour pouvoir intéragir avec le reste de l'appli. D'autres effets sont plus gênants, ils sont décrits dans le tuto de sun.
Je ne les ai pas encore vus, mais c'est vrai que je n'ai pas encore fini la lecture du tutorial ;) Voir cet article
Regarde la doc sur SwingWorker, c'est un peu plus simple à utiliser, et
ça fait la même chose.
Tu peux avoir une explication complète dans le 'java swing tutorial' si
tu veux connaître les détails.
Dans ce tutorial, ils parlent de 3 types de thread: le thread principal
(qui lance l'application), l'EDT et les threads en background (ou worker
thread) pour les tâches longues. Il semble que SwingWorker s'utilise
pour les worker threads.
Dans mon exemple, je parle plus de l'interaction entre le thread
principal et l'EDT. Donc je ne suis pas sure que ce soit le meme
probleme, si?
En gros, l'un des effets de bords très courant, c'est de cliquer sur un
bouton et de devoir attendre le retour d'une action pour pouvoir
intéragir avec le reste de l'appli. D'autres effets sont plus gênants,
ils sont décrits dans le tuto de sun.
Je ne les ai pas encore vus, mais c'est vrai que je n'ai pas encore fini
la lecture du tutorial ;)
Voir cet article
Regarde la doc sur SwingWorker, c'est un peu plus simple à utiliser, et ça fait la même chose. Tu peux avoir une explication complète dans le 'java swing tutorial' si tu veux connaître les détails.
Dans ce tutorial, ils parlent de 3 types de thread: le thread principal (qui lance l'application), l'EDT et les threads en background (ou worker thread) pour les tâches longues. Il semble que SwingWorker s'utilise pour les worker threads. Dans mon exemple, je parle plus de l'interaction entre le thread principal et l'EDT. Donc je ne suis pas sure que ce soit le meme probleme, si?
En gros, l'un des effets de bords très courant, c'est de cliquer sur un bouton et de devoir attendre le retour d'une action pour pouvoir intéragir avec le reste de l'appli. D'autres effets sont plus gênants, ils sont décrits dans le tuto de sun.
Je ne les ai pas encore vus, mais c'est vrai que je n'ai pas encore fini la lecture du tutorial ;) Voir cet article