Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果不使用File:前缀,则无法构造具有相对文件路径的图像对象_Java_Image_Javafx_Javafx 8_Illegalargumentexception - Fatal编程技术网

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你知道为什么我这样做不管用吗?