Précédent   Forum du club des développeurs et IT Pro > Java > Interfaces Graphiques en Java > SWT/JFace
SWT/JFace Forum d'entraide pour les API SWT/JFace. Avant de poster -> FAQ SWT/JFace
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 16/07/2012, 15h23   #1
Gaspard22
Invité régulier
 
Homme
Développeur Java
Inscription : juillet 2012
Messages : 36
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur Java
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2012
Messages : 36
Points : 7
Points : 7
Par défaut Icone SWT reste en quittant l'application

Bonjour, j'espère que quelqu'un pourra m'aider, car je n'arrive pas a faire disparaître du premier coup l'icone de mon application dans le system Tray.

QUand je quitte l'application, il faut que je passe la souris sur l'icone pour la faire disparaître, elle ne veut pas le faire tout seul, et du coup lorsqu'on s'amuse à le lancer- arrêter , je peux me retrouver avec un system tray rempli d'icone.

pourtant j'ai tenté le dispose() de l'image, du shell ... je ne vois pas

cdt
Gaspard22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2012, 13h36   #2
Gueritarish
Modérateur
 
Avatar de Gueritarish
 
Homme Marc
Développeur Java
Inscription : mai 2007
Messages : 1 567
Détails du profil
Informations personnelles :
Nom : Homme Marc
Âge : 28
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur Java
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2007
Messages : 1 567
Points : 3 430
Points : 3 430
Salut,

Tu pourrais nous donner une version minimale (j'insiste sur le minimal) de ton application pour voir ce qui pourrait mal se passer?
Notamment la partie concernant la gestion du Shell et des images.

Voilà, à+
Gueritarish
__________________
Pas de questions technique par MP, les forums sont là pour ça.

Le 5 et 6 juin à Toulouse, la première EclipseCon France !
Gueritarish est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2012, 15h07   #3
Gaspard22
Invité régulier
 
Homme
Développeur Java
Inscription : juillet 2012
Messages : 36
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur Java
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2012
Messages : 36
Points : 7
Points : 7
mais bien sur voila

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
final Display display = new Display();
final Shell shell = new Shell(display);
 
image = new Image(display, ClassLoader.getSystemClassLoader().getClass().getResourceAsStream("/dent.png"));
 
 tray = display.getSystemTray();
		if (tray == null) {
		  System.out.println("The system tray non disponible");
		} else {
		 item = new TrayItem(tray, SWT.NONE);
		  item.setToolTip(tip);
...
 
      item.setImage(image); 
...
 
while (!shell.isDisposed()) {
		  if (!display.readAndDispatch())
			  display.sleep();
		}
 
		image.dispose();
		display.dispose();
En résumé les interactions entre le shell, l'image et le TrayItem, mais je ne sais pas si ça suffira, je suis à dispo pour tout renseignement supplémentaire

Merci de ton aide
Gaspard22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2012, 09h41   #4
Gueritarish
Modérateur
 
Avatar de Gueritarish
 
Homme Marc
Développeur Java
Inscription : mai 2007
Messages : 1 567
Détails du profil
Informations personnelles :
Nom : Homme Marc
Âge : 28
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur Java
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2007
Messages : 1 567
Points : 3 430
Points : 3 430
Salut,

Tu devrais essayer avec un ImageDescriptor (tu as des méthodes de création statiques, notamment à partir d'une URL). L'intérêt principal est que le cycle de vie de l'image est, du coup, géré par le système.
Mais je ne pense pas que le problème soit là. Peut-être que tu ouvres des Thread qui sont mal fermé dans ton programme...
En tout cas, ça ressemble pas à une terminaison de programme normale.
Pour l'ImageDescriptor, exemple:
Code :
ImageDescriptor.createFromURL(ClassLoader.getSystemClassLoader().getClass().getResource("/dent.png")).createImage();
Voilà, à+
Gueritarish
__________________
Pas de questions technique par MP, les forums sont là pour ça.

Le 5 et 6 juin à Toulouse, la première EclipseCon France !
Gueritarish est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2012, 10h39   #5
Gaspard22
Invité régulier
 
Homme
Développeur Java
Inscription : juillet 2012
Messages : 36
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur Java
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2012
Messages : 36
Points : 7
Points : 7
Apres essai, effectivement ça ne change rien

je vais investiguer du coté de mauvaise fermeture de Threads
merci d'avoir essayé
Gaspard22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2012, 10h50   #6
miaous
Membre du Club
 
Homme
Inscription : novembre 2006
Messages : 28
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : novembre 2006
Messages : 28
Points : 44
Points : 44
Bonjour
tu devrais essayer de "Disposer" les objets tray et item .
miaous est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2012, 10h55   #7
Gueritarish
Modérateur
 
Avatar de Gueritarish
 
Homme Marc
Développeur Java
Inscription : mai 2007
Messages : 1 567
Détails du profil
Informations personnelles :
Nom : Homme Marc
Âge : 28
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur Java
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2007
Messages : 1 567
Points : 3 430
Points : 3 430
Citation:
Envoyé par miaous Voir le message
Bonjour
tu devrais essayer de "Disposer" les objets tray et item .
Inutile à mon avis (sans vouloir te vexer). Une des règles de SWT: quand on dispose le parent, les enfants sont disposé aussi. Et Tray est un enfant de Display. Quant à TrayItem, c'est un enfant de Tray.

Essaye de vérifier si tu n'as pas défini un démon ou si tu n'as pas un Thread non fermé à la fin de ton programme../
__________________
Pas de questions technique par MP, les forums sont là pour ça.

Le 5 et 6 juin à Toulouse, la première EclipseCon France !
Gueritarish est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2012, 11h31   #8
Gueritarish
Modérateur
 
Avatar de Gueritarish
 
Homme Marc
Développeur Java
Inscription : mai 2007
Messages : 1 567
Détails du profil
Informations personnelles :
Nom : Homme Marc
Âge : 28
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur Java
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2007
Messages : 1 567
Points : 3 430
Points : 3 430
Autre question, est-ce que tu fais un System.exit() à la fin de ton programme? Est-ce qu'il est possible qu'il arrive avant que le Display ne soit "disposé"?
J'arrive à reproduire ton cas en faisant:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
final Display display = new Display();
    final Shell createdShell = createContent(display);
    final Image image =
      ImageDescriptor.createFromFile(getClass(), "test.jpg").createImage();
    final Tray systemTray = display.getSystemTray();
    if (systemTray != null) {
      final TrayItem trayItem = new TrayItem(systemTray, SWT.NONE);
      trayItem.setToolTipText("tip");
      trayItem.setImage(image);
    }
    createdShell.open();
    while (!createdShell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    System.exit(0);
    display.dispose();
Bon, la méthode createContent() est une méthode perso pour construire le contenu de mon Shell mais ce n'est pas improtant.
Le plus important est le fait que si le Display (et donc le TrayItem) n'est pas bien "disposé", il va te rester cette icône dans la zone de notification.

Voilà, à+
Gueritarish
__________________
Pas de questions technique par MP, les forums sont là pour ça.

Le 5 et 6 juin à Toulouse, la première EclipseCon France !
Gueritarish est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2012, 12h03   #9
Gaspard22
Invité régulier
 
Homme
Développeur Java
Inscription : juillet 2012
Messages : 36
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur Java
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2012
Messages : 36
Points : 7
Points : 7
Eh non, pas de
Pour expliquer plus en détail, cette partie du code est lancée dans la méthode static main
et je lance des Threads de connection Socket et WebSocket, mais je ne vois pas de sortie malpropre de ce coté là ....
ou alors pas assez cherché...
Gaspard22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2012, 12h24   #10
miaous
Membre du Club
 
Homme
Inscription : novembre 2006
Messages : 28
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : novembre 2006
Messages : 28
Points : 44
Points : 44
Pour voir si tu as un appel de , redéfini le SecurityManager pour avoir un message (méthode checkExit ).

Regarde aussi si tu n'as pas d'exception lancer par
Code :
display.readAndDispatch()
.
miaous est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2012, 15h12   #11
Gaspard22
Invité régulier
 
Homme
Développeur Java
Inscription : juillet 2012
Messages : 36
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur Java
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2012
Messages : 36
Points : 7
Points : 7
Par défaut Résolu

j'ai décidé de regarder finalement ma procedure d'exit de mon application et c'est ça qui ne marchait pas ...

Puis à force d'utiliser la console d'eclipse, je faisais un exit forcé.

Bref, j'ai utilisé un boolean afin de poser une condition d’arrêt à ma lecture d’évènements.

Code :
1
2
3
4
5
while (!shell.isDisposed() && !isDead ) {
		  if (!display.readAndDispatch())
 
			  display.sleep();
		}
sinon j'ai un autre souci, qui est posté ailleurs ( je fais de la pub) pour un pb de progressbar sous MACOSX
Gaspard22 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 06h06.


 
 
 
 
Partenaires

Hébergement Web