Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX图像未在后台显示_Java_Image_Javafx 2_Javafx 8_Fxml - Fatal编程技术网

JavaFX图像未在后台显示

JavaFX图像未在后台显示,java,image,javafx-2,javafx-8,fxml,Java,Image,Javafx 2,Javafx 8,Fxml,我已经尝试了好几次,好几种方法,但我不能在舞台上展示我想要的形象。我认为这可能与java查找资源的路径有关,但我不确定,因为我刚刚开始使用可视化库(本例中为JavaFX)。以下是我的目录结构: MyProject |_assets | |_img | |_myImage.jpg | |_some |_other |_folders | |_src |_ve |_org |_project |_MyPr

我已经尝试了好几次,好几种方法,但我不能在舞台上展示我想要的形象。我认为这可能与java查找资源的路径有关,但我不确定,因为我刚刚开始使用可视化库(本例中为JavaFX)。以下是我的目录结构:

MyProject
 |_assets
 |  |_img
 |     |_myImage.jpg
 |
 |_some
 |_other
 |_folders
 |
 |_src
    |_ve
       |_org
          |_project
             |_MyProject.java
             |_StratPage.fxml
             |_StartPageController.java
我需要检索要渲染的
myImage.jpg
,我尝试了以下方法:

1) 纯fxml方法:

这两种方式都不会产生任何异常,我只是不显示图像。我不知道该怎么办。我非常感谢你的帮助

更新: 弗斯特 我尝试放弃使用建议的目录结构,并将图像文件放在
StartPageController.java
的同一文件夹中。通过做

logo = new ImageView(new Image(getClass().getResourceAsStream("myImage.jpg")))
我没有得到任何例外,但图像没有渲染,这表明我不是在寻找资源,而是在渲染图像。可能是因为缺少图书馆吗?我在Windows 8环境中,使用Netbeans 8.0。再次感谢你的回答

第二
我刚刚在Netbeans的项目属性中停用了打包和分发应用程序。现在图像渲染正确,但我不认为这个问题得到解决,因为当我需要分发软件时,它会重新出现。求求你,还需要帮助!:)

在java应用程序中,文件系统文件资源之间存在区别(在类路径上,在.jar内部)

如果图像是应用程序的一部分,并且是固定的、只读的,如相对路径所示,请使用资源

但是,图像必须在jar中

也许:

/src/assets/img/myImage.jpg
或者使/assets也成为顶级源目录

然后
/img/myImage.jpg
(或者在第一种情况下
/assets/img/myImage.jpg


从编程角度讲,我们不使用文件,而是使用URL
getClass().getResource(“/img/myImage.jpg”)
getResourceAsStream

我在自己的项目中检查了代码,它可以使用下面的代码段。我已经根据你的例子做了调整

 this.logo = new ImageView(new Image(getClass().getResourceAsStream("/assets/img/myImage.jpg")));

我和你犯了同样的错误。因此,为了更正它,将我的图像放在与我的项目的“src”相同级别的resources文件夹中。这是我的代码,它是有效的

public void showImage() {
    try {
        Image image = new Image("resources/img/akonolingaMap.jpg");
        imageView.setImage(image);
        imageView.setCache(true);
    } catch (Exception e) {
        printStackTrace();
    }
}

如果使用Intellij作为主编辑器,则可以将文件夹标记为“资源”,或者只打开“项目结构”->“模块”->,然后将图像文件夹标记为“资源”


希望这将对您有所帮助。

将图标/图片所在的文件夹名称更改为“资源”,可以解决此问题。它必须在您当前的src文件夹中,这对我来说很好(我也有同样的问题)。

您可以尝试使用
this.logo=new-ImageView(“/assets/img/myImage.jpg”)?应该从文件夹的根目录开始查看,并引发异常。预先准备的
文件:
,如下所示:
this.logo=newimageview(“文件:/assets/img/myImage.jpg”)并按照问题中提到的方式进行操作。它不会引发任何异常,但会正确加载应用程序,但不会显示图像。还有别的想法吗?感谢您的帮助:)我正在获取一个
NullPointerException:输入流不能为null
。我还尝试使用
“file:/assets/img/myImage.jpg”
,但也遇到了异常。
getResourceAsStream()
在哪里查找文件?你确定你模拟了与我相同的目录结构吗?试着将你的资产文件夹放在你的src文件夹下,这样行吗?(清洁和建造只是为了确保)嗨!谢谢你的回复!如何使
/assets
成为顶级源目录?你的答案和Perneel的相似,但对我不起作用。请检查Perneel答案中的注释。在eclipse:重命名资产中,右键单击项目:新建/源文件夹:“资产”。然后移动img文件夹。顺便说一句,maven build infrastructure在IDE中非常棒,它提供了最佳实践、文件夹约定。或者只是在src下添加资产。你能提供一个到maven文档的链接吗?我甚至放弃了建议的目录结构,并将图像文件放在
StartPageController.java
的同一文件夹中。通过执行
this.logo=new-ImageView(new-Image(getClass().getResourceAsStream(“myImage.jpg”))
我没有得到异常,但是图像没有呈现,这表明它不是关于查找资源,而是关于呈现。可能是因为缺少图书馆吗?我在Windows 8环境中,使用Netbeans 8.0。再次感谢您的回复。最简单的答案。
 this.logo = new ImageView(new Image(getClass().getResourceAsStream("/assets/img/myImage.jpg")));
public void showImage() {
    try {
        Image image = new Image("resources/img/akonolingaMap.jpg");
        imageView.setImage(image);
        imageView.setCache(true);
    } catch (Exception e) {
        printStackTrace();
    }
}