Java-如何在不使用C:\\Direcory的情况下设置映像路径
我创建了一个java应用程序,我在其中放了一些图像,甚至给了它一个图像图标作为桌面图像,但是当我把它做成jar文件,放在另一台电脑上时,所有的图像都消失了。这是图像路径:Java-如何在不使用C:\\Direcory的情况下设置映像路径,java,image,io,icons,Java,Image,Io,Icons,我创建了一个java应用程序,我在其中放了一些图像,甚至给了它一个图像图标作为桌面图像,但是当我把它做成jar文件,放在另一台电脑上时,所有的图像都消失了。这是图像路径: File imageFile = new File("C:\\Users\\Favour's Computer\\workspace\\Physics Calculator\\src\\res\\icon.jpg"); 我在网上查看了一下,发现问题是我是通过C:\\directory获取文件的,他们说图像文件应该是这样的:
File imageFile = new File("C:\\Users\\Favour's Computer\\workspace\\Physics Calculator\\src\\res\\icon.jpg");
我在网上查看了一下,发现问题是我是通过C:\\directory获取文件的,他们说图像文件应该是这样的:
File imageFile = new File("res/icon.jpg");
我试过了,但没有成功,我不断收到一条错误消息,如:找不到文件
这是我的完整代码:
BufferedImage image = null;
try {
File imageFile = new File("C:\\Users\\Favour's Computer\\workspace\\Physics Calculator\\src\\res\\icon.jpg");
image = ImageIO.read(imageFile);
} catch(IOException e) {
e.printStackTrace();
}
setIconImage(image);
拜托,我已经尝试解决这个问题好几个星期了,有人知道我如何解决这个问题吗,如果你知道,请帮助图像不应该从文件系统加载,而是应该捆绑到应用程序中,在你的jar中 例如,如果您将图像
foo.png
放在jar内的包com.bar.resources
下,您只需使用
InputStream in = getClass().getResourceAsStream("/com/bar/resources/foo.png")
将图像作为输入流加载
这将使用类加载器加载图像。因此,在开发过程中,如果您使用的是标准的IDE项目,您只需要将映像文件放入源目录中相应的包中:IDE将通过将其复制到与生成的.class文件相同的目录来“编译”该文件。
如果您使用的是标准Maven/Gradle项目,则需要将其放入
src/main/resources
下的相应包中。图像不应从文件系统加载,而应捆绑到jar内的应用程序中
例如,如果您将图像foo.png
放在jar内的包com.bar.resources
下,您只需使用
InputStream in = getClass().getResourceAsStream("/com/bar/resources/foo.png")
将图像作为输入流加载
这将使用类加载器加载图像。因此,在开发过程中,如果您使用的是标准的IDE项目,您只需要将映像文件放入源目录中相应的包中:IDE将通过将其复制到与生成的.class文件相同的目录来“编译”该文件。
如果您使用的是标准Maven/Gradle项目,则需要将其放入
src/main/resources
下的相应包中。有两个选项
1) 将res
设置为“源文件夹”。如果使用Eclipse,您将知道这一点。
然后你可以用like
ImageIO.read(new File("res/icon.jpg"));
2) 如果res是普通文件夹,则必须使用。在这种情况下,res将被视为一个包
ImageIO.read(new File("src/res/icon.jpg"));
有两种选择 1) 将
res
设置为“源文件夹”。如果使用Eclipse,您将知道这一点。
然后你可以用like
ImageIO.read(new File("res/icon.jpg"));
2) 如果res是普通文件夹,则必须使用。在这种情况下,res将被视为一个包
ImageIO.read(new File("src/res/icon.jpg"));
问题是您的项目中没有res文件夹,首先,右键单击project创建一个文件夹a“res”,并将image icon.jpg image放置在该“res”中。及
您无法从本地系统检索图像,因为它未附加到项目工作区。问题是您的项目中没有res文件夹,首先,右键单击project创建一个文件夹a“res”,并将image icon.jpg图像放在该“res”中。及
无法从本地系统检索映像,因为它未附加到项目工作区。是静态java项目还是web项目?它是静态java项目app@user3526881不是静态java应用程序它是一个核心java应用程序my Friends,图像位于项目的src/res/icon.jpg中?非常感谢用户3526881,它工作得很好。是静态java项目还是web项目?它是静态java项目app@user3526881不是静态java应用程序它是核心java应用程序my Friends,图像位于项目的src/res/icon.jpg中?非常感谢用户3526881,它工作得非常好。此代码从相对于当前目录的位置加载图像。res文件是否为“源”项目不会改变任何东西。当前目录是启动java命令的目录。最终用户没有任何“项目”和“源”文件夹。它只有一个应用程序,作为一个jar文件。我太狭隘了,对不起。我认为可以使用选项2,或者使用classpath.getResource。。。。方法选项2的意义不如选项1。它加载一个文件(在最终用户机器上不存在)。res作为源代码中的一个包,应该是jar文件的一部分。为什么说它不存在于最终用户机器中?它作为一种资源存在于jar文件中。它在最终用户文件系统中不作为文件存在。因此,尝试使用
ImageIO.read(新文件(“src/res/icon.jpg”)
读取它是不可能的,因为这将加载一个名为icon.jpg的文件,该文件位于当前目录下的res
目录下的src
目录下。最终用户的文件系统上没有这样的src目录。你不知道他的当前目录是什么,因为他可以选择从任何他想要的地方执行应用程序。res文件是否为“源”项目不会改变任何东西。当前目录是启动java命令的目录。最终用户没有任何“项目”和“源”文件夹。它只有一个应用程序,作为一个jar文件。我太狭隘了,对不起。我认为可以使用选项2,或者使用classpath.getResource。。。。方法选项2的意义不如选项1。它加载一个文件(在最终用户机器上不存在)。res作为源代码中的一个包,应该是jar文件的一部分。为什么说它不存在于最终用户机器中?它作为一种资源存在于jar文件中。它在最终用户文件系统中不作为文件存在。因此,尝试使用ImageIO.read(新文件(“src/res/icon.jpg”)
读取它是不可能的,因为这将加载一个名为icon的文件