【问题标题】:java.lang.IllegalArgumentException: Invalid URL: unknown protocol: m / filechooser path problem [duplicate]java.lang.IllegalArgumentException:无效的 URL:未知协议:m / filechooser 路径问题 [重复]
【发布时间】:2019-10-04 00:30:03
【问题描述】:

我正在尝试使用打开仅接受图像的文件选择器的按钮将图像添加到网格视图。当我使用文件选择器中的文件路径为我的网格视图创建 setImage 时,出现异常错误。我认为这是因为我得到的路径是不正确的。

这是失败的代码:

public void makeBrowseButton(Stage primaryStage) {

  //attach handler
  browseButton.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent event) {
      FileChooser fileChooser = new FileChooser();                                                                            // create object
      fileChooser.getExtensionFilters().addAll(new FileChooser.ExtensionFilter("Image Files", "*.png", "*.jpg", "*.gif"));    //filter for music files
      //FileFilter filter = new FileNameExtensionFilter("JPEG file", "jpg", "jpeg");
  if ( !parentPath.equalsIgnoreCase("")) {                                                                              //go to previous directory if exists
      File parentPathFile = new File(parentPath);
      fileChooser.setInitialDirectory(parentPathFile);
  }
      File selectedFile = fileChooser.showOpenDialog(primaryStage);

        if (selectedFile != null) {                                                  // display the dialog box
          String wholePath = selectedFile.getPath();
          String name = selectedFile.getName();
          String megaPath = selectedFile.getAbsolutePath();
          parentPath = selectedFile.getParent();
          System.out.println("wholePath: " + wholePath);
          System.out.println("File Name: " + name);
          System.out.println("megaPath: " + megaPath);

         Image newAwesomeImage = new Image(megaPath);
         ImageView view = new ImageView();
         view.setImage(newAwesomeImage);
         paneofgridmonkeys.add(view, 0, 0);
         //paneofgridmonkeys.add(new Label("Changed the image!"), 0, 1);
         createDisplay(primaryStage);
       }}});
     }

错误消息是它说的确切问题是行的标题:

view.setImage(newAwesomeImage);

至于我的 system.out 结果,这就是我得到的结果:

wholePath: M:\Home\BenStillerDuckFace.jpg
File Name: BenStillerDuckFace.jpg
megaPath: M:\Home\BenStillerDuckFace.jpg

我尝试了所有这些并且不起作用。有什么想法吗?

【问题讨论】:

    标签: java javafx


    【解决方案1】:

    Image(String url) 构造函数需要 URL 字符串,而不是文件名。文件名不是 URL。

    要将文件名字符串转换为 URL 字符串,请执行以下操作之一:

    // Java 7+
    String megaUrl = Paths.get(megaPath).toUri().toURL().toString();
    
    // Java 1.4+
    String megaUrl = new File(megaPath).toURI().toURL().toString();
    

    【讨论】:

    • 感谢@Andreas,这是我现在遇到错误的问题:未报告的异常 MalformedURLException;必须捕获或声明指向 toURL() 我尝试使用 try and catch 并没有得到任何东西
    • @Zieryn try { ... } catch (MalformedURLException e) { throw new IllegalArgumentException(e); }
    • 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2012-08-13
    • 2019-03-26
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 2021-07-29
    • 1970-01-01
    相关资源
    最近更新 更多