我正在使用LWJGL和Slick2D。我将项目导出到.jar并使用JarSplice生成可执行文件,因此我不需要可执行jar所在位置的库文件。我的问题是,如果我从Eclipse运行项目然后加载每个图像,但如果我运行导出的可执行jar,则不会加载图像,因为它无法找到。图片位于/ res文件夹中,这是加载纹理的方法:
private Texture loadTexture(String key) {
try {
return TextureLoader.getTexture("PNG", new FileInputStream(
new File("res/" + key + ".png")));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
在这里我加载纹理:
Texture background = loadTexture("main_menu/bg");
我尝试了很多导出jar的方法,但我没有任何工作方式。
答案 0 :(得分:0)
如果它们在jar中,您可能需要将它们作为类路径资源加载。见:
getClass().getClassLoader().getResourceAsStream(...)
答案 1 :(得分:0)
查看我的旧代码,这甚至可以正常工作
ByteBuffer buf = null;
try{
texture = TextureLoader.getTexture("PNG", ResourceLoader.getResourceAsStream("res/" + key + ".png"));
int texId = texture.getTextureID();
buf = ByteBuffer.allocateDirect(4*texture.getImageWidth()*texture.getImageHeight());
}catch(IOException e){
e.printStackTrace();
}
// Create a new texture object in memory and bind it
//int texId = GL11.glGenTextures(); - if the trick with texture.getTextureID() won't work - use THIS
GL13.glActiveTexture(GL13.GL_TEXTURE0);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, texId);
// All RGB bytes are aligned to each other and each component is 1 byte
GL11.glPixelStorei(GL11.GL_UNPACK_ALIGNMENT, 1);
// Upload the texture data and generate mip maps (for scaling)
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGB, texture.getImageWidth(), texture.getImageHeight(), 0,
GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, buf);
//then you can generate some mipmaps
//Setup the ST coordinate system
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL12.GL_CLAMP_TO_EDGE);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL12.GL_CLAMP_TO_EDGE);
// Setup what to do when the texture has to be scaled
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST_MIPMAP_LINEAR);
你需要的是texId
。
我希望你知道如何使用纹理;)。
答案 2 :(得分:0)
我所做的是在netbeans项目中有一个名为 source 的文件夹,当我创建一个.jar时,我使用它与JarSplice一起加载lib和native。然后我用winrar打开了新的.jar,我将源拖到了.jar中,每次运行.jar时都会使用jar里面的文件夹。 source和res一样,但我重命名了。
所以基本上把你的res文件夹放到.jar中它会起作用。