将图像加载到ImageView JavaFX


问题内容

我想在对话框窗口中显示图像(保存在项目文件夹中),但是当我运行方法showDialogWithImage时,我得到FileNotFoundExcpetion:imgs
\ pic1.jpg(系统找不到指定的文件),尽管图像位于此处。

我也尝试过以这种方式加载图像:
Image image = new Image(getClass()。getResourceAsStream(path));,但遇到了同样的问题。

还有其他可能将图像加载到ImageView吗?
谢谢你的帮助!

  • 我的Java代码位于项目文件夹中的src \ myProject \ gui中。

  • path =“ imgs \ pic1.jpg” // imgs位于项目文件夹中

    public void showDialogWithImage(String path) {
            final Stage dialogStage = new Stage();

            logger.info(path);

            InputStream is = null;
            try {
                is = new FileInputStream(path); // here I get FileNotFoundException
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }

            Image image = new Image(is);
            ImageView view = new ImageView();
            view.setImage(image);

            Button btnOK = new Button("OK");
            btnOK.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    dialogStage.close();
                }
            });

            dialogStage.initModality(Modality.WINDOW_MODAL);
            dialogStage.setScene(new Scene(VBoxBuilder.create()
                    .children(view, btnOK).alignment(Pos.CENTER)
                    .padding(new Insets(35)).build()));
            dialogStage.show();

        }

问题答案:

getClass().getResourceAsStream(path)将从调用类的位置开始其文件搜索。因此,使用此路径"imgs\pic1.jpg",您的意思是这是您的文件结构

src\myProject\gui\imgs\pic1.jpg

要使搜索遍历,您需要在之前添加额外的分隔符imgs。所以

"\imgs\pic1.jpg"

另外,我认为当使用反斜杠作为分隔符时,您需要对其进行转义。所以

"\\imgs\\pic1.jpg

或者只是使用正斜杠

"/imgs/pic1.jpg

另一种选择是使用类加载器,该类加载器将从根开始搜索,而您不需要开始的分隔符

getClass().getClassLoader().getResourceAsStream("imgs/pic1.png");