【问题标题】:Translating Windows absolute path to Java将 Windows 绝对路径转换为 ​​Java
【发布时间】:2017-12-11 01:39:49
【问题描述】:

我有一个名为 dog.jpg 的文件,它位于 c:\Temp 中。所以它的完整 Windows 路径是 C:\Temp\dog.jpg

本网站上的每个答案都建议将 \ 替换为 /,但我尝试过的这些语句似乎都不起作用:

Image image = new Image("C:\\Temp\\dog.jpg");
Image image = new Image("C://Temp//dog.jpg");
Image image = new Image("C:/Temp/dog.jpg");

(顺便说一句,如果我将 dog.jpg 放在当前工作目录中并使用它确实有效:

Image image = new Image("dog.jpg");

)

我收到以下异常报告:

Exception in Application start method
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: Invalid URL: unknown protocol: c
        at javafx.scene.image.Image.validateUrl(Image.java:1121)
        at javafx.scene.image.Image.<init>(Image.java:620)
        at Inclass_week7_session_1_4.start(Inclass_week7_session_1_4.java:21)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
        at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
        at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
        ... 1 more
Caused by: java.net.MalformedURLException: unknown protocol: c
        at java.net.URL.<init>(Unknown Source)
        at java.net.URL.<init>(Unknown Source)
        at java.net.URL.<init>(Unknown Source)
        at javafx.scene.image.Image.validateUrl(Image.java:1115)




C:\Java\Tutorial\JavaFX 2>javac -version
javac 1.8.0_102

我做错了什么?我怎样才能让这个 Windows 绝对路径工作?

感谢您的帮助。

【问题讨论】:

  • 我一直使用Java的File类来查看文件是否存在。另外,您的 ImageView 在哪里。我还转到文件所在的文件夹并复制文件资源管理器的地址。然后我添加文件名和扩展名。
  • 查看文档。 Image(String)-Constructor 接受一个 URL 字符串!您还可以在 Stacktrace 中看到:Caused by: java.lang.IllegalArgumentException: Invalid URL: unknown protocol: c。您必须使用 file 协议(请参阅 Joe C 的评论)或打开 FileInputStream 并使用构造函数 Image(InputStream)

标签: java windows path absolute translate


【解决方案1】:

图像类构造函数需要一个 url 而不是绝对路径,所以在你的 url 中添加协议

 Image img = new Image("file:///C:/Temp/dog.jpg");

【讨论】:

    猜你喜欢
    • 2016-01-07
    • 2014-01-28
    • 2017-08-01
    • 2011-11-07
    • 2011-05-02
    相关资源
    最近更新 更多