Java-如何在不使用C:\\Direcory的情况下设置映像路径

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获取文件的,他们说图像文件应该是这样的:

我创建了一个java应用程序,我在其中放了一些图像,甚至给了它一个图像图标作为桌面图像,但是当我把它做成jar文件,放在另一台电脑上时,所有的图像都消失了。这是图像路径:

 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的文件