首页 文章

将图像加载到ImageView JavaFX

提问于
浏览
2

我想在对话框窗口中显示图像(保存在项目文件夹中),但是当我运行我的方法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();

    }

2 回答

  • 4

    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");
    
  • 0

    当您使用路径加载图像时,您需要将分隔符文件“\”替换为“/”

    String ImageName="MyImage.png";
    
                                File file = new File("src\\Messages\\Attachements\\Images");
    
                                try {
                                    if (!file.exists()) {
                                        FileUtils.forceMkdir(file);
    
    
                                    } 
    
                                    }
    
                                } catch (Exception io) {
                                    io.printStackTrace();
                                }
                                Image image = new Image("/Messages/Attachements/Images/"+ImageName=);
                                ImageReceived.setImage(image);
    

相关问题