Java .jar文件在没有资源文件夹的情况下未运行

Java .jar文件在没有资源文件夹的情况下未运行,java,eclipse,jar,buildpath,Java,Eclipse,Jar,Buildpath,我在YouTube上观看了一个关于如何用Java构建游戏的教程。我稍微修改了代码,但保留了所有的基本内容。当我将带有eclipse的游戏导出为可运行jar时,只有当resources文件夹与jar位于同一目录中时,游戏才会工作。否则,即使资源文件夹位于构建路径和jar中,我也会得到一个空白屏幕 您可以在此处查看完整代码: 但我认为最重要的部分是: public class FontLoader { public static Font loadFont(String path, float s

我在YouTube上观看了一个关于如何用Java构建游戏的教程。我稍微修改了代码,但保留了所有的基本内容。当我将带有eclipse的游戏导出为可运行jar时,只有当resources文件夹与jar位于同一目录中时,游戏才会工作。否则,即使资源文件夹位于构建路径和jar中,我也会得到一个空白屏幕

您可以在此处查看完整代码:

但我认为最重要的部分是:

public class FontLoader {

public static Font loadFont(String path, float size){
    try {
        return Font.createFont(Font.TRUETYPE_FONT, new File(path)).deriveFont(Font.PLAIN, size);
    } catch (FontFormatException | IOException e) {
        e.printStackTrace();
        System.exit(1);
    }
    return null;
}
}

public class Utils {

public static String loadFileAsString(String path){
    StringBuilder builder = new StringBuilder();

    try{
        BufferedReader br = new BufferedReader(new FileReader(path));
        String line;
        while((line = br.readLine()) != null)
            builder.append(line + "\n");

        br.close();
    }catch(IOException e){
        e.printStackTrace();
    }

    return builder.toString();
}

public static int parseInt(String number){
    try{
        return Integer.parseInt(number);
    }catch(NumberFormatException e){
        e.printStackTrace();
        return 0;
    }
    }

}

public class ImageLoader {

public static BufferedImage loadImage(String path){
    try {
        return ImageIO.read(ImageLoader.class.getResource(path));
    } catch (IOException e) {
        e.printStackTrace();
        System.exit(1);
    }
    return null;
}

}
我没有在我的版本中修改这些

我的下一个猜测是清单文件是问题所在,但我真的不知道如何修改它才能使jar正常运行。 自动创建的仅包含以下内容:

Manifest-Version: 1.0
Class-Path: .
Main-Class: main.Launcher

即使字体包含在JAR中,也要使用它(而不是作为文件使用JAR中的文件),并以与在
loadImage
中相同的方式获取
InputStream
。JAR中的内容不是文件,您不能使用文件API来读取它们。@howlger谢谢,我修复了FontLoader的代码。一个简单的问题是,loadFileAsString方法不起作用的原因也是一样的?@bry42是的,您需要的不是
新文件读取器(路径)
,例如
InputStreamReader