设置图像javafx时发生运行时错误illegalargumentexception

laawzig2  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(459)

我得到这个错误

Caused by: java.lang.IllegalArgumentException: Invalid URL: unknown
protocol: c at javafx.scene.image.Image.validateUrl(Image.java:1097) 
at javafx.scene.image.Image.<init>(Image.java:598)
at javafx.scene.image.ImageView.<init>(ImageView.java:164)
at fileshare_client.fx.pkg1.UploadappUI_1Controller.iconimagebuttonAction(Uploadapp‌​UI_1Controller.java:355)" java:355

哪个是

imageview=new ImageView(iconimage.getAbsolutePath());"

这是我的密码:

@FXML
private AnchorPane mainAnchorpane;
@FXML
private ImageView imageview;
private File iconimage;

@FXML
public void iconimagebuttonAction(ActionEvent event) {
  FileChooser filechooser = new FileChooser();
  iconimage = filechooser.showOpenDialog(mainAnchorpane.getScene().getWindow());
  System.out.println(iconimage.getName());
    if (iconimage != null) {
      String iconimagepath = iconimage.getAbsolutePath();
      System.out.println(iconimagepath);
    **imageview=new ImageView(iconimage.getAbsolutePath());**// error
    }
}
qaxu7uf2

qaxu7uf21#

下面是我使用的代码片段。

File imageFile = new File("mountains001.jpg");
      System.out.println(imageFile.getAbsolutePath());
      if (imageFile.exists()) {
         ImageView imageView = new ImageView();
         Image image = new Image(imageFile.toURI().toString());
         imageView.setImage(image);
         root.getChildren().add(imageView);
      }
jgwigjjp

jgwigjjp2#

这里必须在imageview的构造函数中提供url
所以建议的代码是:

@FXML
public void iconimagebuttonAction(ActionEvent event) {
    FileChooser filechooser = new FileChooser();
    iconimage = filechooser.showOpenDialog(mainAnchorpane.getScene().getWindow());
    System.out.println(iconimage.getName());
    if (iconimage != null) {
        try {
            String iconimagepath = iconimage.getAbsolutePath();
            System.out.println(iconimagepath);
            imageview=new ImageView(iconimage.toURI().toURL().toExternalForm());

        } catch (MalformedURLException ex) {
            Logger.getLogger(UploadappUI_1Controller.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}
beq87vna

beq87vna3#

使用

iconimage.getAbsolutePath()

提供文件的绝对路径,如构造函数所期望的 file URL 尝试使用

iconimage.toURI().toString()

或附加 file: 到绝对路径

"file:" + iconimage.getAbsolutePath()

相关问题