web-dev-qa-db-fra.com

Comment obtenir correctement une image du dossier 'Ressources' dans NetBeans

J'ai un projet Java dans NetBeans 7.0.

Je veux ajouter une image à une étiquette dynamiquement. L'image différera selon l'état du programme.

Je mets une image de ce type, 'remplissage.jpg', dans le dossier 'ressources' de mon projet.

Je veux accéder à ce fichier correctement (pas par chemin absolu ou relatif, car cela causera des problèmes lorsque je construis le fichier jar).

J'ai donc trouvé cette méthode:

ImageIcon fillingIcon = new ImageIcon(getClass().getClassLoader().getResource("filling.jpg"));
labelFontFilling.setIcon(fillingIcon);

Il me donne toujours Java.lang.NullPointerException . Mais je suis sûr qu'il existe cette image, car je peux affecter l'image à l'étiquette à partir du menu Propriétés de NetBeans correspondant à cette étiquette (mais je ne le souhaite pas, je vouloir ajouter l'image en code Java).

Qu'est-ce que je fais mal et comment puis-je obtenir cette image correctement?

29
ShockwaveNN

Merci, Valter Henrique , avec ton conseil, j’ai réalisé que j’avais simplement entré un chemin incorrect pour cette image .

    String pathToImageSortBy = "resources/testDataIcons/filling.png";
    ImageIcon SortByIcon = new ImageIcon(getClass().getClassLoader().getResource(pathToImageSortBy));

Mais la manière correcte était d'utiliser le nom de mon projet dans le chemin d'accès à la ressource

String pathToImageSortBy = "nameOfProject/resources/testDataIcons/filling.png";
ImageIcon SortByIcon = new ImageIcon(getClass().getClassLoader().getResource(pathToImageSortBy));
20
ShockwaveNN

Cela a été une douleur, en utilisant netBeans IDE 7.2.

  1. Vous devez vous rappeler que Netbeans nettoie le dossier de construction chaque fois que vous reconstruisez,
  2. Ajoutez un dossier de ressources au dossier src :

    • (projet)
      • src
        • dossier du package de projet (contient les fichiers .Java)
        • ressources (quel que soit le nom que vous voulez)
        • images (sous-dossiers optionnels)
  3. Après le nettoyage/construction, cette structure est propagée dans le dossier de construction:

    • (projet)
      • construire
        • des classes
          • dossier du package de projet (contient les fichiers .class générés)
          • ressources (vos ressources)
          • images (vos sous-dossiers facultatifs)

Pour accéder aux ressources:

dlabel = new JLabel(new ImageIcon(getClass().getClassLoader().getResource("resources/images/logo.png")));

et:

if (common.readFile(getClass().getResourceAsStream("/resources/allwise.ini"), buf).equals("OK")) {

a travaillé pour moi. Notez que dans un cas, il y a un "/" principal et dans l'autre, il n'y a pas . Ainsi, la racine du chemin d'accès aux ressources est le dossier " classes " dans la construction dossier.

Double-cliquez sur le fichier jar exécutable dans le dossier dist. Le chemin d'accès aux ressources fonctionne toujours.

45
Jamie

J'ai une approche légèrement différente qui pourrait être utile/plus bénéfique pour certains.

Sous votre dossier de projet principal, créez un dossier de ressources. Votre structure de dossier devrait ressembler à ceci.

  • Dossier de projet
    • construire
    • dist
    • lib
    • nbprojet
    • ressources
    • src

Accédez aux propriétés de votre projet. Vous pouvez le faire en cliquant avec le bouton droit de la souris sur votre projet dans la fenêtre de l'onglet Projets et en sélectionnant Propriétés dans le menu déroulant.

Sous catégories sur le côté gauche, sélectionnez Sources.

Dans les dossiers de package source à droite, ajoutez votre dossier de ressources à l'aide du bouton Ajouter un dossier. Une fois que vous cliquez sur OK, vous devriez voir un dossier de ressources sous votre projet.

 enter image description here

Vous devriez maintenant pouvoir extraire des ressources en utilisant cette ligne ou une approche similaire:

MyClass.class.getResource("/main.jpg");

Si vous deviez créer un package appelé Images dans le dossier des ressources, vous pouvez récupérer la ressource de la manière suivante:

MyClass.class.getResource("/Images/main.jpg");
20
Matthew Pautzke