【发布时间】:2015-11-28 18:25:30
【问题描述】:
我有代码从与 java 文件相同的目录中读取图像文件,但目前我只能在给出 entier 路径的情况下让它工作。
picture = new JLabel(new ImageIcon(ImageIO.read(new File("C:\\Users\\...\\ogre.png"))));
图像与 java 文件位于同一文件夹中。但是,当我尝试 "ogre.png" 或 ".\\ogre.png" 或类似时,它不起作用。
我的问题是:
我最终将导出到 JAR,这会影响创建 jar 后的情况吗? (我假设是的,因为创建 jar 不会更改源代码)。
如何从同一文件夹而不是确切的文件路径读取文件,例如在包含文件夹要移动的情况下。
【问题讨论】:
-
您需要设身处地为应用程序的最终用户着想。最终用户所拥有的只是一个包含应用程序的 jar 文件。根本没有java源文件。应用程序应该在哪里读取图像?它们是否应该是属于最终用户的图像,并且位于最终用户的硬盘上?还是应该将它们交付并嵌入到应用程序中?
-
试试
getClass().getResource(...) -
@JBNizet 图片是预定义的,可能会在 jar 文件中
-
那么你一定不能使用文件IO来加载它们。您必须使用类加载器从类路径加载它们,就像从文件系统(在开发期间)或从 jar 文件(一旦捆绑)加载类一样。
new ImageIcon(MyClass.class.getResource("/com/mycompany/myapp/images/ogre.png")),假设 png 文件在包中com.mycompany.myapp.images.
标签: java file-io javax.imageio