JavaFX Image ne montre pas au stade
J'ai essayé à plusieurs reprises et de plusieurs manières, mais je ne peux pas faire mon image show sur scène que je veux. Je pense que ça a à voir avec le chemin d'accès où java recherche des ressources, mais je ne suis pas sûr, puisque je viens juste de commencer à l'aide de visual bibliothèques (JavaFX dans ce cas). Voici ma structure de répertoire:
MyProject
|_assets
| |_img
| |_myImage.jpg
|
|_some
|_other
|_folders
|
|_src
|_ve
|_org
|_project
|_MyProject.java
|_StratPage.fxml
|_StartPageController.java
J'ai besoin de récupérer myImage.jpg
être rendu, et j'ai essayé le suivant:
1) Pur fxml approche:
<ImageView id="logo" fx:id="logo" fitHeight="99.0" fitWidth="99.0" layoutX="14.0" layoutY="18.0" pickOnBounds="true" preserveRatio="true"> <image> <Image url="@../../../../assets/img/myImage.jpg" /> </image> </ImageView>
2) en Utilisant les deux fxml et java. Déclarant la ImageView
élément avec fx:id="logo"
, et d'injecter de l'image de StartPageController.java
comme ceci:
public class StartPageController implements Initializable {
@FXML
private ImageView logo;
@Override
public void initialize(URL url, ResourceBundle rb) {
this.logo = new ImageView("file:../../../../assets/img/myImage.jpg");
}
}
Ni la façon de produire aucune exception, je viens juste de ne pas afficher l'image. Je n'ai aucune idée de quoi faire. Je serais vraiment reconnaissant de votre aide.
MISES à jour:
Première
J'ai essayé de les abandonner ayant le projet de structure de répertoire, et placé le fichier image dans le même dossier de StartPageController.java
. En faisant
logo = new ImageView(new Image(getClass().getResourceAsStream("myImage.jpg")))
Je ne suis pas une exception, mais l'image n'est pas rendu, qui me suggère, il n'est pas sur la recherche de la ressource, mais sur le rendu de l'image. Pourrait-il être le manque de n'importe quelle bibliothèque? Je suis sur un environnement de Windows 8, à l'aide de Netbeans 8.0. Merci encore pour vos réponses.
Deuxième
J'ai juste désactivé l'emballage et la distribution de l'application dans les propriétés du projet dans Netbeans. Désormais, les images sont rendu correctement, mais je ne considère pas le problème résolu, puisque quand j'ai besoin de distribuer le logiciel, il sera de nouveau émerger. S'il vous plaît, l'aide est toujours nécessaire! 🙂
this.logo = new ImageView("/assets/img/myImage.jpg");
? Qui devrait démarrer à la recherche de la racine de votre dossier.Essayé
this.logo = new ImageView("/assets/img/myImage.jpg");
, et a déclenché une Exception. Preppended file:
, comme ceci: this.logo = new ImageView("file:/assets/img/myImage.jpg");
et se sont comportés comme mentionné dans la question. Il ne jette pas exception, mais les charges de l'application correctement à l'exception de l'image qui ne s'affiche pas. Une autre idée? Merci pour votre aide 🙂OriginalL'auteur Throoze | 2014-06-17
Vous devez vous connecter pour publier un commentaire.
J'ai eu la même erreur que vous. Donc, pour corriger mis mon image dans le dossier de ressources dans le même niveau de "src" de mon projet. C'est mon code, et ça fonctionne.
OriginalL'auteur Anatole ABE
J'ai vérifié le code dans mon propre projet et il fonctionne avec de l'extrait de code ci-dessous. J'ai ajusté à votre exemple
NullPointerException: Input stream must not be null
. J'ai aussi essayé d'utiliser"file:/assets/img/myImage.jpg"
, mais l'exception. D'où vientgetResourceAsStream()
recherche le fichier?êtes-vous sûr de simulation de la même structure de répertoire que j'ai?
Essayez de mettre vos biens dossier sous le dossier src, cela fonctionne? (nettoyer et créer juste pour être sûr)
OriginalL'auteur Perneel
Dans une application java, il existe une distinction entre le système de fichiers Fichier et ressources (sur le chemin de classe, à l'intérieur de l' .jar).
Si l'image est une partie de la demande, et fixe, en lecture seule, car le chemin relatif à l'indique, l'utilisation d'une ressource.
Cependant, alors l'image doit être à l'intérieur du bocal.
Peut-être:
ou de faire rapport à l'actif d'un sommet du répertoire source de trop.
Puis
/img/myImage.jpg
(ou, dans le premier cas/assets/img/myImage.jpg
)Par programme on n'utilise pas le Fichier, mais l'URL
getClass().getResource("/img/myImage.jpg")
ougetResourceAsStream
./assets
une source de haut niveau de répertoire? votre réponse est similaire à Perneel, mais il ne fonctionne pas pour moi. Vérifier les commentaires dans Perneel de réponse s'il vous plaît.Dans eclipse: renommer actifs, cliquez-droit sur le projet: Nouveau / Dossier Source: "actifs". Puis déplacez le dossier img. BTW le maven construction de l'infrastructure est excellent sur toute IDEs, et offre de meilleures pratiques, dossier de conventions.
Ou tout simplement ajouter des actifs en vertu de la src.
Pourriez-vous fournir un lien vers maven de la documentation sur les bonnes pratiques?
J'ai même abandonné sur le projet de structure de répertoire, et placé le fichier image dans le même dossier de
StartPageController.java
. En faisantthis.logo = new ImageView(new Image(getClass().getResourceAsStream("myImage.jpg")))
, je ne suis pas l'exception, mais l'image n'est pas rendu, qui me suggère, il n'est pas sur la recherche de la ressource, mais sur le rendu. Pourrait-il être le manque de n'importe quelle bibliothèque? Je suis sur un environnement de Windows 8, à l'aide de Netbeans 8.0. Merci encore pour vos réponses.OriginalL'auteur Joop Eggen
Si vous utilisez l'Ide, comme votre rédacteur en chef, puis vous pouvez marquer votre dossier "Ressources" ou il suffit d'ouvrir "la Structure de Projet" -> "Modules" -> alors la marque de votre dossier d'images comme "Ressources"
Espère que cela va vous aider.
OriginalL'auteur PiBits