2013-07-19 1 views
2

Je veux juste changer l'image de l'icône de la barre d'état système pour mon application. Je l'ai fait 2 choses -Changer l'icône de la barre d'état système dans java

vient de changer l'URL dans le programme par défaut -

final TrayIcon trayIcon = new TrayIcon(createImage("images/Graph.png", "tray icon")); 

Deuxième essai -

Image img = Toolkit.getDefaultToolkit().getImage("images/Graph.png"); 
final TrayIcon trayIcon = new TrayIcon(img, "Application Name", popup); 

L'application lance dans les deux cas, mais pas d'image est affichée. C'est un espace réservé vide. Qu'est-ce que je fais mal ?

+0

Le travail réalisé du programme original? Vous avez seulement changé le chemin pour l'icône? – Rayf

+0

l'ampoule dans le programme d'origine fonctionne. Ya j'ai seulement changé le chemin de l'icône dans le premier essai. – Dan

+0

Quelque chose semble faux avec votre chemin alors. Si vous utilisez l'exemple de l'ampoule, vous devriez pouvoir changer l'icône et la faire fonctionner. Fichier manquant? Essayez un autre type de fichier? Cas peut-être? – Rayf

Répondre

4

images/Graph.png n'est pas une URL valide pour une image située dans votre pot. Par conséquent, je suppose que img est nul sur votre deuxième essai.

Je vous suggère de cette façon:

//Get the URL with method class.getResource("/path/to/image.png") 
URL url = System.class.getResource("/images/Graph.png"); 

//Use it to get the image 
Image img = Toolkit.getDefaultToolkit().getImage(url); 

final TrayIcon trayIcon = new TrayIcon(img, "Application Name", popup); 

Vous assurent également que images/ est dans votre classpath.

+0

Vous n'avez pas besoin d'un pot pour lancer l'application, le chemin d'exécution de java someClass vs java -jar someJar.jar est différent. – Rayf

+0

cela fonctionne mais sans rien ajouter au chemin de la classe. Mais pourquoi le premier essai n'a-t-il pas fonctionné? – Dan

+1

@Dans le/le chemin. – Rayf

2

Le problème est la façon dont vous incluez le fichier d'image que l'image est à l'intérieur de votre . jar, utilisez getResource() ou getResourceAsStream, essayez ceci:

try { 
    InputStream inputStream= ClassLoader.getSystemClassLoader().getResourceAsStream("/images/Graph.png"); 
//or getResourceAsStream("/images/Graph.png"); also returns inputstream 

    BufferedImage img = ImageIO.read(inputStream); 
    final TrayIcon trayIcon = new TrayIcon(img, "Application Name", popup); 
} 
    catch (IOException e) {} 
Questions connexes