我已经搜遍了整个互联网上的几十个主题(包括stackoverflow),我找不到任何帮助我的东西,也许是因为我太愚蠢而无法理解它。我可能是Java的新手。
无论如何,程序在Eclipse内运行完美,它可以获取所有需要的图像,文件等。一旦我将它作为可运行的JAR导出,我就无法打开它,甚至没有命令提示符(说& #34;无法访问)。
这是我尝试的,导入资源:
package main;
import java.io.File;
public class Loader {
public static String path = "/Z:/Eclipse/workspace/FirstGame/src/";
static File smoothFont;
static File roughFont;
static File alahuSong;
static File deathAlahu;
static File hitSoundAlahu;
static File hitSoundBit;
static File deathBit;
static File hpBit;
static File selectbit;
static File songBit;
static File colorFile;
static File easyScoreFile;
static File normalScoreFile;
static File hardScoreFile;
static File insaneScoreFile;
static File meSteam;
static File manelFaxe;
static File mePassado;
static File manelSteam;
public static void load(Game game) {
game.getClass().getResource(path + "res/summerStormSmooth.ttf");
game.getClass().getResource(path + "res/summerStormRough.ttf");
game.getClass().getResource(path + "res/alahuSong.ogg");
game.getClass().getResource(path + "res/deathAlahu.ogg");
game.getClass().getResource(path + "res/hitSoundAlahu.ogg");
game.getClass().getResource(path + "res/hitSoundBit.ogg");
game.getClass().getResource(path + "res/deathBit.ogg");
game.getClass().getResource(path + "res/hpBit.ogg");
game.getClass().getResource(path + "res/selectBit.ogg");
game.getClass().getResource(path + "res/songBit.ogg");
game.getClass().getResource(path + "res/colorFile.txt");
game.getClass().getResource(path + "res/easyScoreFile.txt");
game.getClass().getResource(path + "res/normalScoreFile.txt");
game.getClass().getResource(path + "res/hardScoreFile.txt");
game.getClass().getResource(path + "res/insaneScoreFile.txt");
game.getClass().getResource(path + "res/meSteam.png");
game.getClass().getResource(path + "res/manelFaxe.png");
game.getClass().getResource(path + "res/mePassado.png");
game.getClass().getResource(path + "res/manelSteam.png");
}
}
此外,这是我的构建的组织方式: :D
我可以为您提供所需的更多信息,感谢您的帮助!
答案 0 :(得分:0)
您传递的字符串值无效。 Class.getResource接受的String参数不是文件名。
您应该传递相对于.jar根目录的路径。如果您不确定.jar文件中确切包含哪些文件,请检查Eclipse中的.jar文件,或使用命令窗口查看带有 jar tf MyApplication的.jar文件的.jar
如果项目设置正确,它可能会将res
目录的内容捆绑到最终的.jar文件中,在这种情况下,调用Class.getResource的正确方法是:
static URL smoothFont;
static URL roughFont;
// ...
static URL colorFile;
// ...
static URL meSteam;
public static void load(Game game) {
smoothFont = Loader.class.getResource("/summerStormSmooth.ttf");
roughFont = Loader.class.getResource("/summerStormRough.ttf");
// ...
colorFile = Loader.class.getResource("/colorFile.txt");
// ...
meSteam = Loader.class.getResource("/meSteam.png");
// ...
}
当在<.jar文件中时,无法将数据称为File
,因为它们只是表示压缩数据的.jar文件字节序列中的条目 - 而不是实际的单独文件。
幸运的是,加载URL就像加载文件一样简单:
Font loadedSmoothFont;
try (InputStream stream = smoothFont.openStream()) {
loadedSmoothFont = Font.createFont(Font.TRUETYPE_FONT, stream);
}
String colorFileContents;
try (Scanner scanner = new Scanner(colorFile.openStream())) {
colorFileContents = scanner.useDelimiter("\\z").next();
}
BufferedImage meSteamImage = ImageIO.read(meSteam);