【问题标题】:Load image to ImageView JavaFX将图像加载到 ImageView JavaFX
【发布时间】:2014-05-09 18:30:51
【问题描述】:

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

    }

【问题讨论】:

    标签: java javafx javafx-2


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      当您加载带有路径的图像时,您需要将分隔文件“\”替换为“/”,例如

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-17
        相关资源
        最近更新 更多