无法使用文件:前缀构造具有相对文件路径的图像对象

时间:2016-09-21 07:20:40

标签: java image javafx javafx-8 illegalargumentexception

我一直在尝试创建这样的图像对象:

Image img = new Image("images/jack.png");

Image img = new Image("jack.png");

/jack.png/images/jack.png等。

我使用System.getProperty("user.dir")查找了工作目录,这确实是我放置图片文件的地方。当我使用file:前缀时,它确实有效,如下所示:

Image img = new Image("file:images/jack.png");

然而,它也应该在不使用它的情况下工作。在教科书中,它没有file:。我已经看到其他没有它的代码。

在一堆链式异常结束时,它说:

Caused by: java.lang.IllegalArgumentException: Invalid URL or resource not found

我还尝试从OpenJDK读取源代码,我可以解决任何问题,因为许多方法都是原生的,从我追踪到的,我不明白它是如何工作的。另外,我可以用同样的方式创建文件,我只是无法创建图像。例如,这有效:

File file = new File("fileName.txt");

导致这个问题的原因是什么,我应该怎么做才能解决它?

如果重要的话,我正在使用NetBeans。

2 个答案:

答案 0 :(得分:2)

请注意System.getProperty("user.dir")不会返回工作目录。它返回用户目录 可以使用File构造函数中的相对文件路径指定相对于工作目录的路径。然而,依赖工作目录是不好的做法。从NetBeans启动应用程序会导致工作目录成为项目目录,但情况并非如此,如果以不同的方式启动。

因此,您应用程序中需要的图像应添加到jar中 在这种情况下,您可以通过Class.getResource()检索图像URL。 (使用String转换为toExternalForm()。)

如果您有File引用图片文件,则可以使用File实例获取URL

File file = ...
String urlString = file.toURI().toURL().toExternalForm();

这些网址可以与Image构造函数一起使用。

请注意

File file = new File("fileName.txt");

创建文件。它只代表一个文件路径。此文件可能存在,也可能不存在。简单地调用File构造函数不会创建新的构造函数。

答案 1 :(得分:1)

File file = new File("name.txt");

在某处创建文件。它不会读取现有文件,而

Image image = new Image("pathToImage.png");

尝试读取现有图像。为了能够读取存储在某处的图像,您需要绝对路径,这需要协议(httpfileftp等等。或者您将图像放入'known'目录,就像项目的资源目录一样。 比如说,你有src/main/java下的java源代码。资源目录可以是src/main/resources。将图像放在那里,尝试使用相对于src/main/resources的相对路径。