Java 如果不使用File:前缀,则无法构造具有相对文件路径的图像对象
我一直在尝试创建一个图像对象,如下所示:Java 如果不使用File:前缀,则无法构造具有相对文件路径的图像对象,java,image,javafx,javafx-8,illegalargumentexception,Java,Image,Javafx,Javafx 8,Illegalargumentexception,我一直在尝试创建一个图像对象,如下所示: Image img = new Image("images/jack.png"); 或 或/jack.png或/images/jack.png等 我使用System.getProperty(“user.dir”)查找了工作目录,它确实是我放置图像文件的地方。当我使用文件:前缀时,它确实起作用,如下所示: Image img = new Image("file:images/jack.png"); 然而,它也应该在不使用它的情况下工作。在教科书中,它没
Image img = new Image("images/jack.png");
或
或/jack.png
或/images/jack.png
等
我使用System.getProperty(“user.dir”)
查找了工作目录,它确实是我放置图像文件的地方。当我使用文件:
前缀时,它确实起作用,如下所示:
Image img = new Image("file:images/jack.png");
然而,它也应该在不使用它的情况下工作。在教科书中,它没有文件:
。我见过其他没有它的代码
在一系列链式异常的末尾,它说:
原因:java.lang.IllegalArgumentException:找不到无效的URL或资源
我还试着阅读OpenJDK
中的源代码,我能找出任何东西,因为许多方法都是本地的,从我跟踪的内容来看,我不明白它是如何工作的。而且,我可以用同样的方法创建文件,我只是不能创建图像。例如,这是有效的:
File file = new File("fileName.txt");
是什么导致此问题,我应该如何解决它
如果有必要的话,我正在使用NetBeans
File file = new File("name.txt");
在某处创建一个文件。它不读取现有文件,而
Image image = new Image("pathToImage.png");
尝试读取现有图像。为了能够读取存储在某处的图像,您需要绝对路径,该路径需要协议(http
、file
、ftp
等),或者将图像放入“已知”目录,如项目的资源目录。
比如说,您的java源代码位于src/main/java
下。资源目录可以是src/main/resources
。将您的图像放在那里,然后尝试使用相对于src/main/resources
的相对路径
在某处创建一个文件。它不读取现有文件,而
Image image = new Image("pathToImage.png");
尝试读取现有图像。为了能够读取存储在某处的图像,您需要绝对路径,该路径需要协议(http
、file
、ftp
等),或者将图像放入“已知”目录,如项目的资源目录。
比如说,您的java源代码位于
src/main/java
下。资源目录可以是src/main/resources
。将图像放在那里,然后尝试使用相对路径相对src/main/resources
注意System.getProperty(“user.dir”)
不返回工作目录。它返回用户目录。可以使用
文件
构造函数中的相对文件路径指定相对于工作目录的路径。但是,依赖工作目录是不好的做法。从NetBeans启动应用程序会导致工作目录成为项目目录,但如果以不同的方式启动,情况并非如此
因此,应用程序中需要的图像应该添加到jar中。在这种情况下,您可以通过检索图像
URL
。(使用toExternalForm()
转换为String
)
如果有引用图像文件的文件
,则可以使用文件
实例获取URL
:
File file = ...
String urlString = file.toURI().toURL().toExternalForm();
这些URL可以与Image
构造函数一起使用
注意
File file = new File("fileName.txt");
不创建文件。它只是表示一个文件路径。此文件可能存在,也可能不存在。仅调用
文件
构造函数不会创建新的构造函数。请注意System.getProperty(“user.dir”)
不会返回工作目录。它返回用户目录。可以使用
文件
构造函数中的相对文件路径指定相对于工作目录的路径。但是,依赖工作目录是不好的做法。从NetBeans启动应用程序会导致工作目录成为项目目录,但如果以不同的方式启动,情况并非如此
因此,应用程序中需要的图像应该添加到jar中。在这种情况下,您可以通过检索图像
URL
。(使用toExternalForm()
转换为String
)
如果有引用图像文件的文件
,则可以使用文件
实例获取URL
:
File file = ...
String urlString = file.toURI().toURL().toExternalForm();
这些URL可以与Image
构造函数一起使用
注意
File file = new File("fileName.txt");
不创建文件。它只是表示一个文件路径。此文件可能存在,也可能不存在。仅仅调用
文件
构造函数不会创建新的构造函数。为什么不将图像放入项目的resources文件夹中呢。那你就可以和亲戚一起工作了paths@ArthurEirich你知道为什么我这样做不起作用吗?你为什么不把你的图片放到项目的参考资料文件夹里呢。那你就可以和亲戚一起工作了paths@ArthurEirich你知道为什么我这样做不管用吗?