JavaFx Images Chemin
J'ai un problème avec ma classe Java. En fait le code est bien, mais si j'cliquez sur le bouton il y a une exception causé du chemin de l'image.
static Image currentBackground = new Image("Snake/Images/background_options.png", true);
Et le compilateur du message:
Exception in thread "main" java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:122)
Caused by: java.lang.IllegalArgumentException: Invalid URL: Invalid URL or resource not found
at javafx.scene.image.Image.validateUrl(Image.java:1100)
at javafx.scene.image.Image.<init>(Image.java:624)
at view.OptionsWindow.<clinit>(OptionsWindow.java:21)
... 3 more
Caused by: java.lang.IllegalArgumentException: Invalid URL or resource not found
at javafx.scene.image.Image.validateUrl(Image.java:1092)
... 5 more
Le processus est terminé avec le code de sortie 1
Quelqu'un peut-il m'aider?
- Le message dit explicitement
Invalid URL or resource not found
. Ceci suggère que l'url spécifié est incorrect. Pouvez-vous modifier votre question et ajouter de la structure du projet? - Question connexe: d'Où vient javafx.de la scène.image.Image(“la fleur.png”) regarder pour la fleur.png?
Vous devez vous connecter pour publier un commentaire.
La
Image
constructeur attend la spécification d'un URL, pas un chemin du système de fichiers. En supposant que vous groupez cette image dans le cadre de votre demande, vous devrez charger à partir du même endroit que vos classes sont chargées: probablement un fichier jar dans votre déploiement final, mais peut-être à partir du système de fichiers en cours de développement.Mécanisme pour obtenir une URL de la représentation d'une ressource qui est la partie de l'application est d'appeler
getResource()
sur unClass
ouchargeur de classe
.La manière exacte de le faire dépend de votre projet de la structure, qui ne vous ont pas montré, mais par exemple:
va charger l'image à partir d'une ressource spécifiée par rapport à la classe en cours, et
va charger l'image à partir d'une ressource spécifiée par rapport au chemin de classe.
Dans le cas où vous passez un
String
qui représente une URL relative (c'est à dire un qui n'a pas, commefile:
,http:
, oujar:
), puis leImage
constructeur de recherche sur le chemin de classe pour la ressource. En d'autres termesest équivalent à
Cela semble un peu contre-intuitif (pour moi, du moins), donc je préfère toujours spécifier une URL, ou pour récupérer l'un de
getClass().getResource()
ouFile.toURI().toURL()
appropriées.contextClassLoader
. La documentation indique aussi explicitement, "Si la chaîne passée n'est pas une URL valide, mais un chemin d'accès au lieu de cela, l'Image est recherché sur le chemin de classe dans ce cas". Cela signifie quenew Image("Snake/Images/background_options.png");
est parfaitement bien et va charger l'image exactement comme il se doit, comme indiqué dans votre premier exemple.new Image("Snake/Images/background_options.png")
est toujours à la recherche d'un fichier jar, si l'application est déployée de cette façon. Il a juste l'interprète comme une URL relative (et par rapport au chemin de classe).getClass().getResource(...)
ougetClass().getClassLoader.getResource(...)
et sa façon de chargement de l'Image est incorrecte. Maintenant, avec des informations supplémentaires, il est parfait. +1