Load image to ImageView JavaFX

2020-02-10 09:40发布

I would like to display image(saved in project folder) in dialog window, but when I run my method showDialogWithImage I get FileNotFoundExcpetion: imgs\pic1.jpg (The system cannot find the file specified), although the image is located there.

I have tried load image on this way too:
Image image = new Image(getClass().getResourceAsStream(path));, but got the same problem.

Are there some others possibilities to load image to ImageView ?
Thank you for help!

  • My Java code is located in src\myProject\gui in project folder.

  • path="imgs\pic1.jpg" // imgs is located in project folder

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条回答
孤傲高冷的网名
2楼-- · 2020-02-10 09:59

getClass().getResourceAsStream(path) will start its file search from the location of the calling class. So by using this path "imgs\pic1.jpg", you're saying this is your file structure

src\myProject\gui\imgs\pic1.jpg

To have the search traverse back, you need the extra separator before imgs. So

"\imgs\pic1.jpg"

Also, I think when you use a back slash as separator, you need to escape it. So

"\\imgs\\pic1.jpg

Or just use forward slash

"/imgs/pic1.jpg

Another option is to use a class loader, that will search from the root, where you don't need the beginning separator

getClass().getClassLoader().getResourceAsStream("imgs/pic1.png");
查看更多
Ridiculous、
3楼-- · 2020-02-10 10:07

when you load an image with path you need replace seperator file "\" with "/" for example

                            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);
查看更多
登录 后发表回答