IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Icone du SystemTray plus visible lors du déploiement .jar


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut Icone du SystemTray plus visible lors du déploiement .jar
    Bonjour,

    Je fais une appli swing et j'ai implémenter un SystemTray comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
     // Pour afficher une icone correspondant a l'appli 
    	      //dans la barre des taches de l'OS
    		if (SystemTray.isSupported()) {
    			SystemTray tray = SystemTray.getSystemTray();
    			Image image = Toolkit.getDefaultToolkit().getImage("images/folder_database.png");
    			ActionListener exitListener = new ActionListener() {
    				public void actionPerformed(ActionEvent e) {
    					System.out.println("Exiting...");
    					System.exit(0);
    				}
    			};
    			PopupMenu popup = new PopupMenu();
    			MenuItem defaultItem = new MenuItem("Exit");
    			defaultItem.addActionListener(exitListener);
    			popup.add(defaultItem);
    			trayIcon = new TrayIcon(image, "Aide_Manager",popup);
    			trayIcon.setImageAutoSize(true);
    			trayIcon.addActionListener(this);
     
    			try {
    				tray.add(trayIcon);
    			} catch (AWTException e) {
    				System.err.println("TrayIcon could not be added.");
    			}
     
    		} else {
    			System.out.println("SystemTray n'est pas supportee");
    		}
    	}
    Le souci, c'est que quand je déploie l'appli en .jar, je n'ai plus l'icone dans la partie zone de notification de la barre windows.
    Mais quand je run mon main sur eclipse, j'apercois bien mon icone.

    Que faut-il faire pour avoir l'icone visible sans mettre de chemin absolu?


    Merci

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Il faut tu mette l'image dans un package de ton arborescence de classes (et non un dossier quelconque) que tu indiques le chemin de l'image dans ton classpath. Et bien sur que cette image soit, in fine, dans ton jar.

    Par exemple, pour une image img.png se trouvant dans le package com.company.application.resources.images, il faudra procéder de la façon suivante:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BufferedImage img = ImageIO.read("/com/company/application/resources/images/img.png");
    Accessoirement, pour charger une image il est préférable d'éviter de passer par Toolkit.getImage qui est une méthode antédiluvienne et asynchrone.
    On utilisera plutôt la méthode ImageIO.read

  3. #3
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut
    Donc tu me suggère de faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    //dans la barre des taches de l'OS
    		if (SystemTray.isSupported()) {
    			SystemTray tray = SystemTray.getSystemTray();
    			BufferedImage image = ImageIO.read("/vue/folder_database.png");			ActionListener exitListener = new ActionListener() {
    				public void actionPerformed(ActionEvent e) {
    					System.out.println("Exiting...");
    					System.exit(0);
    				}
    			};
    			PopupMenu popup = new PopupMenu();
    			MenuItem defaultItem = new MenuItem("Exit");
    			defaultItem.addActionListener(exitListener);
    			popup.add(defaultItem);
    			trayIcon = new TrayIcon(image, "Aide_Manager",popup);
    			trayIcon.setImageAutoSize(true);
    			trayIcon.addActionListener(this);
     
    			try {
    				tray.add(trayIcon);
    			} catch (AWTException e) {
    				System.err.println("TrayIcon could not be added.");
    			}
     
    		} else {
    			System.out.println("SystemTray n'est pas supportee");
    		}
    	}
    du coup mon image, je la met dans le package vue.

    On fait comment pour:
    il faut que tu indiques le chemin de l'image dans ton classpath
    ??

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    J'ai oublié une chose, pour récupérer une ressource dans le classpath il faut procéder de la façon suivante (si vue est le package dans lequel se trouve dans le package vue):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.getClass().getResource("/vue/folder_database.png");
    Donc pour charger ton image:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ImageIO.read(this.getClass().getResource("/vue/folder_database.png"));

  5. #5
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut
    Citation Envoyé par sinok Voir le message
    J'ai oublié une chose, pour récupérer une ressource dans le classpath il faut procéder de la façon suivante (si vue est le package dans lequel se trouve dans le package vue):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.getClass().getResource("/vue/folder_database.png");
    Donc pour charger ton image:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ImageIO.read(this.getClass().getResource("/vue/folder_database.png"));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.getClass().getResource("/vue/folder_database.png");

    faut mettre ca ou dans mon Main ou dans ma classe fenêtre à la suite de ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    // Pour afficher une icone correspondant a l'appli 
    	      //dans la barre des taches de l'OS
    		if (SystemTray.isSupported()) {
    			SystemTray tray = SystemTray.getSystemTray();
    			Image image = Toolkit.getDefaultToolkit().getImage("C:/Donnees/Aide_Manager/images/folder_database.png");
    			ActionListener exitListener = new ActionListener() {
    				public void actionPerformed(ActionEvent e) {
    					System.out.println("Exiting...");
    					System.exit(0);
    				}
    			};
    			PopupMenu popup = new PopupMenu();
    			MenuItem defaultItem = new MenuItem("Exit");
    			defaultItem.addActionListener(exitListener);
    			popup.add(defaultItem);
    			trayIcon = new TrayIcon(image, "Aide_Manager",popup);
    			trayIcon.setImageAutoSize(true);
    			trayIcon.addActionListener(this);
     
    			try {
    				tray.add(trayIcon);
    			} catch (AWTException e) {
    				System.err.println("TrayIcon could not be added.");
    			}
     
    		} else {
    			System.out.println("SystemTray n'est pas supportee");
    		}

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Tu remplace le Toolkit.getImage par le code que je t'ai donné.

Discussions similaires

  1. La localisation ne fonctionne plus lors du déploiement
    Par MaximePalmisano dans le forum ASP.NET
    Réponses: 0
    Dernier message: 29/09/2011, 15h32
  2. Réponses: 2
    Dernier message: 22/07/2009, 01h31
  3. Table plus visibles dans le fenêtre relation.
    Par jp67 dans le forum Access
    Réponses: 2
    Dernier message: 13/04/2006, 00h10
  4. [Plugin][Lomboz] web.xml reste vide lors du déploiement
    Par ollivier dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 19/01/2006, 14h20
  5. Réponses: 1
    Dernier message: 13/07/2005, 21h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo