我一直在尝试创建这样的图像对象:
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。
答案 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");
尝试读取现有图像。为了能够读取存储在某处的图像,您需要绝对路径,这需要协议(http
,file
,ftp
等等。或者您将图像放入'known'目录,就像项目的资源目录一样。
比如说,你有src/main/java
下的java源代码。资源目录可以是src/main/resources
。将图像放在那里,尝试使用相对于src/main/resources
的相对路径。