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.

Donc 5 lignes de code pour charger l'icône est mieux, puis 2 lignes de code? Bien sûr, pour trouver le secret à l'aide de 2 lignes de code, vous fait faire un peu de lecture sur votre propre. Je crois que le secret restera cachée.

OriginalL'auteur bcoughlan | 2010-03-06