将图像加载到ImageView JavaFX

时间:2014-03-30 13:00:17

标签: java javafx 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 个答案:

答案 0 :(得分: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");

答案 1 :(得分:0)

当您使用路径加载图像时,需要更换分隔符文件&#34; \&#34;用&#34; /&#34;例如

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