Load image to ImageView JavaFX


Question

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();

    }
1
2
3/30/2014 1:00:16 PM

Accepted Answer

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");
4
3/30/2014 1:10:51 PM

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);

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon