Comment accéder à des ressources dans le fichier JAR?
J'ai un projet Java avec une barre d'outils et la barre d'outils contient des icônes sur elle. Ces icônes sont stockés dans un dossier "ressources", ainsi par exemple le chemin d'accès peut être "ressources/icon1.png". Ce dossier se trouve dans mon répertoire src, de sorte que lorsqu'il est compilé le dossier est copié dans bin/
J'utilise le code suivant pour accéder aux ressources.
protected AbstractButton makeToolbarButton(String imageName, String actionCommand, String toolTipText,
String altText, boolean toggleButton) {
String imgLocation = imageName;
InputStream imageStream = getClass().getResourceAsStream(imgLocation);
AbstractButton button;
if (toggleButton)
button = new JToggleButton();
else
button = new JButton();
button.setActionCommand(actionCommand);
button.setToolTipText(toolTipText);
button.addActionListener(listenerClass);
if (imageStream != null) { //image found
try {
byte abyte0[] = new byte[imageStream.available()];
imageStream.read(abyte0);
(button).setIcon(new ImageIcon(Toolkit.getDefaultToolkit().createImage(abyte0)));
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
imageStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} else { //no image found
(button).setText(altText);
System.err.println("Resource not found: " + imgLocation);
}
return button;
}
(nomimage sera "ressources/icon1.png", etc). Cela fonctionne bien lorsque vous exécutez dans Eclipse. Cependant, lorsque j'exporte un runnable JAR à partir d'Eclipse, les icônes ne sont pas trouvés.
J'ai ouvert le fichier JAR et le dossier de ressources est là. J'ai tout essayé, en déplaçant le dossier, en modifiant le fichier JAR, etc, mais je ne peut pas récupérer les icônes à afficher.
Personne ne sait ce que je fais mal?
(Une question, est-il un analyseur de fichier qui peut travailler avec les fichiers JAR? Lorsque le chemin des problèmes surviennent j'ai l'habitude de simplement ouvrir FileMon pour voir ce qu'il se passe, mais ça montre que l'accès au fichier JAR dans ce cas)
Merci.
OriginalL'auteur bcoughlan | 2010-03-06
Vous devez vous connecter pour publier un commentaire.
Pour charger une image à partir d'un POT de l'utilisation des ressources le code suivant:
java.awt.Trousse à outils
OriginalL'auteur Christian
Je vois deux problèmes avec votre code:
Cela suppose que le fichier image est dans le même dossier que le .fichier de classe de la classe de ce code est de, pas dans un autre dossier de ressources. Essayez plutôt ceci:
Un autre problème:
La méthode
InputStream.available()
ne pas de retour, le nombre total d'octets dans le flux! Elle renvoie le nombre d'octets disponibles sans blocage, qui est souvent beaucoup moins.Vous devez écrire une boucle pour copier les octets d'un temporaire
ByteArrayOutputStream
jusqu'à la fin du flux est atteinte. Vous pouvez également utilisergetResource()
et lacreateImage()
méthode qui prend un paramètre de l'URL.OriginalL'auteur Michael Borgwardt
La section de la Balançoire tutoriel sur la Comment Utiliser les Icônes vous montre comment créer un URL et de lire l'Icône en deux états.
OriginalL'auteur camickr
Par exemple, dans un projet NetBeans, créer un dossier de ressources dans le dossier src. Mettre vos images (jpg, ...).
Si vous utilisez ImageIO ou boîte à outils (y compris getResource), vous devez inclure un en-tête /dans votre chemin d'accès au fichier image:
Si ce code est à l'intérieur de votre classe JFrame, l'image est ajoutée à l'image comme une icône dans votre barre de titre.
OriginalL'auteur Alain Demortier