加载图像到ImageView JavaFX

问题描述:

我想在对话窗口中显示图像(保存在项目文件夹中),但是当我运行我的方法showDialogWithImage时,我得到FileNotFoundExcpetion:imgs \ pic1.jpg(系统找不到指定的文件),虽然图像位于那里。加载图像到ImageView JavaFX

我也试过在这种方式加载图像:
Image image = new Image(getClass()。getResourceAsStream(path));, but got the same problem。

是否有其他一些可能性将图像加载到ImageView?
谢谢你的帮助!

  • 我的Java代码位于项目文件夹中的src \ myProject \ gui中。

  • 路径= “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(); 

    } 

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

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

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