Java .jar文件在没有资源文件夹的情况下未运行
我在YouTube上观看了一个关于如何用Java构建游戏的教程。我稍微修改了代码,但保留了所有的基本内容。当我将带有eclipse的游戏导出为可运行jar时,只有当resources文件夹与jar位于同一目录中时,游戏才会工作。否则,即使资源文件夹位于构建路径和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
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
。