Comment dois-je utiliser getResource() en Java?
Cette question est posée dans de nombreux endroits, avec une myriade de petites variations. (Comme Java - getClassLoader().getResource() me conduire fou entre autres.) Je ne peut toujours pas faire le travail.
Voici un extrait de code:
String clipName = "Chook.wav";
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
//URL url = classLoader.getResource(clipName);
URL url = new URL("file:///Users/chap/Documents/workspace/the1620/bin/ibm1620/" + clipName);
ais = AudioSystem.getAudioInputStream(url);
Cela fonctionne: à noter que j'ai codé en dur le chemin d'accès au répertoire contenant le fichier de clip, qui est là, et est dans le même répertoire que mon .fichier de classe. Hélas, commenté code renvoie une valeur null pour les url.
La plupart des autres postes semblent traiter avec getResourceAsStream(). Je pense que je suis censé être à l'aide de getResource(). Est que qui fait la différence?
Juste ne peut pas être dur. Toute indices?
clipName
?Mise à jour orig. post. ("Chook.wav")
OriginalL'auteur Chap | 2011-06-19
Vous devez vous connecter pour publier un commentaire.
Lors de l'utilisation de
getResource
, la chaîne de passe doit être soit un nom absolu ou être valide par rapport à une certaine classe. Depuis que vous utilisezClassLoader.getResource()
et pasClass.getResource()
, il doit être un chemin absolu.Sans voir votre véritable hiérarchie des fichiers, je ne peux que deviner que "bin" est à la racine de votre compilé des classes et des ressources, et "ibm1260" est un package/dossier dans le chemin, et "Chook.wav" existe dans ce dossier. Si c'est le cas, alors vous devez utiliser
/ibm1260/Chook.wav
(ou potentiellementibm1260/Chook.wav
, je ne suis pas habituellement utiliser le chargeur de classe de ressource recherches) que le nom du fichier que vous passez àgetResource()
.De toute façon, vous devez vous assurer que le fichier est copié dans l'emplacement de votre code compilé et que le dossier racine est sur le chemin de la classe.
Elle doit être fine. Avez-vous essayé ma suggestion de l'utilisation de
/ibm1260/Chook.wav
? Quel a été le résultat? Noter que quand je dis "il doit être un chemin absolu" ce que je voulais dire, c'est qu'il doit être pleinement qualifié, tout comme le chemin d'accès complet deInteger.class
serait/java/lang/Integer.class
.Sur les lectures, il semble que
ibm1260/Chook.wav
est la valeur absolue de nom de ressource que vous voulez.Oui!! "ibm1620/Chook.wav" travaillé. Donc, chargeur de classe prend apparemment un à la racine du répertoire de compilation sortie. En fait, je préfère fermer ma "ressources" dans un sous-répertoire de mon .les fichiers de classe, mais comment je dis Eclipse et/ou NetBeans c'est ce que je veux, c'est un casse-tête pour un autre soir.
Si Marc réponse résolu le problème, merci de le marquer comme "correcte".
OriginalL'auteur Mark Peters
La
getResource
etgetResourceAsStream
méthodes pour accéder à des ressources sur le chemin de la classe. Vous semblez être en train d'essayer d'accéder à une ressource qui n'est pas sur le chemin de la classe.La logique qui
getResource
etgetResourceAsStream
utiliser pour localiser les ressources, c'est essentiellement le même. La différence entre les méthodes est que l'on retourne une URL, et de l'autre uneInputStream
.Ce n'est pas difficile du tout. Vous avez juste besoin de comprendre comment les chemins de classe ... et assurez-vous que vous utilisez un nom de ressource qui correspond à une ressource que vous avez mis dans l'emplacement correct dans l'un des répertoires ou des fichiers JAR dans le classpath.
Ou si la ressource n'est pas "partie" de votre application, ne pas procéder de cette façon.
La classe est "the1620". Le chargeur de classe semble chercher à "the1620/bin". Mon .catégorie fichiers et les fichiers de ressources sont en "the1620/bin/ibm1620". Il ne peut pas être "dur", mais il est sûr à confusion! 😉
Dans ce cas, vous devez appeler getResource("/ibm1620/Chook.wav").
J'ai perdu la trace de ce que nous parlons ici, mais dans le texte suivant: "chargeur de classe classLoader = Thread.currentThread().getContextClassLoader(); dire(classLoader.toString()); URL url = classLoader.getResource(clipName); ` clipName doit être "ibm1620/Chook.wav" et non PAS "/ibm1620/Chook.wav". Les derniers résultats en paramètre de l'url à null. Toutes mes excuses pour l'horrible mise en forme ici. J'ai fait mes sentiments sur les outils d'édition connue dans le MÉTA. 🙂
OriginalL'auteur Stephen C