我一直在尝试创建这样的图像对象:
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:
的情况下完成的。我见过其他没有它也能工作的代码。
在一堆链式异常的末尾,它说:
由以下原因引起:java.lang.IllegalArgumentException:无效的 URL 或未找到资源
我还尝试从 OpenJDK
读取源代码,我可以弄清楚任何事情,因为许多方法都是 native 的,并且从我跟踪的内容来看,我不明白它是如何不起作用的。另外,我可以用同样的方式创建文件,只是无法创建图像。例如,这有效:
File file = new File("fileName.txt");
是什么原因导致此问题,我应该采取什么措施来解决它?
如果重要的话,我正在使用 NetBeans。
最佳答案
请注意,System.getProperty("user.dir")
不会返回工作目录。它返回用户目录。
可以使用 File
构造函数中的相对文件路径指定相对于工作目录的路径。然而,依赖工作目录是不好的做法。从 NetBeans 启动应用程序会导致工作目录成为项目目录,但如果以不同的方式启动,则情况并非如此。
因此,应将应用程序中所需的图像添加到 jar 中。
在这种情况下,您可以通过 Class.getResource()
检索图像 URL
。 (使用 toExternalForm()
转换为 String
。)
如果您有一个引用图像文件的 File
,则可以使用 File
实例获取 URL
:
File file = ...
String urlString = file.toURI().toURL().toExternalForm();
这些 URL 可以与 Image
构造函数一起使用。
请注意
File file = new File("fileName.txt");
不创建文件。它仅代表一个文件路径。该文件可能存在也可能不存在。仅调用 File
构造函数不会创建新的构造函数。
关于java - 无法在不使用文件 : Prefix 的情况下构造具有相对文件路径的图像对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39609896/