将 .JAR 和动态加载的资产打包到一个 .EXE 中

Package .JAR and Dynamically loaded assets into one .EXE

问题:
我有一个 .jar 文件和 2 个包含资产的文件夹。我希望将它们全部打包到一个 .exe 文件中。我已经尝试过 Launch4j,但这不允许将资产添加到 .exe 中。

问题二:
我使用 "assets/audio/" + assetName 在我的程序中定义文件路径。这是否需要按照您的方法进行更改,如果是,如何更改?如果你不知道这个问题的答案,就不要回答。

此问题已针对其他语言提出here and here,但这些问题的答案无济于事。任何东西都有帮助,提前谢谢你。

您可以将资产放入您的 jar 中。

例如,如果您有一个名为 Test.txt 的文件并且您想要打印 文件内容到控制台

"Test.txt"文件放在与根包同级的名为assets的包中

The project structure will look like this

package net.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class Test {
    public static void main(String[]args) {
        BufferedReader br = null;

        try {
            InputStream is = Test.class.getResourceAsStream("/assets/Test.txt");

            if(is != null) {
                br = new BufferedReader(new InputStreamReader(is)); 

                //Print the content of Test.txt
                String line;
                while((line = br.readLine()) != null) {
                    System.out.println(line); 
                }
            } else {
                //Resource not found
                System.out.println("Resource unavailable!");
            }

        } catch (IOException e) {
            e.printStackTrace(); //Log IO Error
        } finally {
            if(br != null) {
                try {
                    br.close();
                } catch (IOException e) {}
            }
        }
    }
}

您不能像通常使用 File 对象访问外部文件那样访问 .jar 资源。

如果您的资产在 jar 中,您可以使用 Launch4j(或替代方案)来 得到一个 .exe.