【问题标题】:Making dynamic filepaths for an exportable JAR file为可导出的 JAR 文件创建动态文件路径
【发布时间】:2020-09-18 11:20:09
【问题描述】:

我想为我的朋友制作一个可运行的小型程序。由于我使用的是 Mac 并且它们大多运行 Windows,因此我必须为我在程序中使用的文件路径(仅图像)创建一个 动态结构。唉,这是我的问题:

创建动态文件路径的最简单方法是什么,以便我的程序无论在哪台计算机(和操作系统)上运行都可以找到文件?

鉴于我必须将我的程序导出到 JAR 文件中,图像必须合并到 JAR 文件中

怎么可能?

我已阅读有关将文件放入程序的 src 文件夹并创建可运行的 JAR 文件的信息,但它不起作用...(可能是因为我的 IDE?我使用的是 Eclipse 4.13.0)。

       try {
        File file = new File(".");
        String path = file.getCanonicalPath() + "/src";     // I put the img in the src folder of the program
        String newFile = path + "someImage.jpeg";
        BufferedImage myPicture = ImageIO.read(new File(newFile));
        JLabel panel = new JLabel(new ImageIcon(myPicture));
        c.add(panel);
    } catch (IOException e) {
    }

这在 Eclipse 中运行时有效,但在运行可运行 JAR 文件时无效。

。 . .

感谢每一个答案,同时我会继续自己寻找答案! :)

【问题讨论】:

    标签: java file dynamic jar path


    【解决方案1】:

    在我看来,您只是希望将图像作为应用程序的资源文件。所以,我建议把它们放在罐子里,让你的客户看不见(只要你只需要阅读它们,罐子就是只读的。)

    我在我的 IDE 中使用 Maven ...所以,当 IDE 构建它时,pom 编辑告诉构建将这些资源添加到 jar 中,是这样的:

    <!-- AND THIS IS HOW YOU ADD YOUR OWN RESOURCES INTO THE JAR                                                                                                          
     -->            
            <resources>
              <resource>
                <directory>src/resources/gum</directory>
                <includes>
                  <include>**/*.txt</include>
                  <include>**/*.jpg</include>
                </includes>
              </resource>
            </resources>
    

    看看我是如何指示在我自己的 /src 下的特殊文件夹中的......但是在 jar 中,它们出现在根目录中。我必须记住现在在我的文件名前加上一个初始路径分隔符,因为我正在查看一个相对于 jvm 在 jar 中工作时运行的工作目录的文件夹。

    然后,当您从 jar 中加载资源时,您必须使用与在普通文件系统上读取的结构稍有不同的结构来读取文件。您将资源作为流加载,或者它只是引发异常。这是一个如何查找图像的示例。

        java.awt.Image frameImage = new javax.swing.ImageIcon(
            getClass().getResource("/LotsaIcon.jpg")
        ).getImage();
        this.setIconImage(frameImage);
    

    我希望这对您有所帮助。

    编辑:它从 IDE 运行良好的原因是 IDE 实际上并没有运行 jar,它运行类文件,并且从 IDE 项目中某处的工作目录,而不是任何正在执行的 jar 的根目录。

    Edit2:你是说即使是可执行的 jar 也行不通?还是只是读取文件部分失败了?因为,就像我对 Maven 所做的那样,你还必须告诉 IDE 你想要一个可执行的 jar,我也为此添加了 pom 编辑,告诉它要添加到它创建的 jar 清单中的主类,否则它赢了'不是一个可执行的jar。

    【讨论】:

    • 嗨,谢谢您的快速回答!所以我认为我没有你想象的那么先进。我不知道 pom 文件是如何参与构建 .jar 文件的,我不知道将它放在哪里,甚至不知道如何将它放在任何地方。无论如何,你帮了我很多,因为我现在知道我必须弄清楚如何创建一个 pom 文件;)
    • pom 文件是 Maven 使用的配置或构建文件。您需要向其中添加条目以完成某些事情,例如依赖关系,有关资源的说明,在这种情况下,有关可运行 jar 的主类是什么等的说明......甚至告诉它制作一个可执行的 jar .每个 Maven 项目已经有一个 pom.xml 文件,您可以编辑该文件并将您的 sn-ps 添加到该文件中。通常,您在 Internet 上找到的 sn-ps 可以让您在 Maven 项目中包含某人的库。在 Maven 中研究这个 pom.xml 东西,这是你定制项目的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 2022-08-08
    相关资源
    最近更新 更多