Ich bin mit einem Tutorial Buch über LWJGL3 gefolgt und ich habe versucht, meinen eigenen Bild laden Code (Der Buch-Code verwendet nicht die STB-Bibliothek) und es funktioniert einwandfrei, wenn das Projekt wird normal ausgeführt (IntelliJ IDE, direkt aus dem Build-Ordner), Es lädt das Bild aus dem ByteBuffer und stbi_load_from_memory
funktioniert gut, aber sobald es kompiliert und in eine JAR-Datei eingefügt wird funktioniert es einfach, auch das Bild wurde erfolgreich in den ByteBuffer geladen, als ob die stbi_load_from_memory
Funktion nur null zurückgibt, wenn sie in einem Jar ist.LWJGL 3 stbi_load_from_memory funktioniert nicht in jar
Der Code:
public static ByteBuffer loadImage(String fileName, IntBuffer w,
IntBuffer h, IntBuffer comp) throws Exception
{
ByteBuffer image;
//the class name is Utils
InputStream imageFile =
Utils.class.getResourceAsStream(fileName);
//The image data gets put into the byte array no matter if
//its a jar or not
byte[] imageData = new byte[imageFile.available()];
imageFile.read(imageData);
ByteBuffer imageBuffer =
BufferUtils.createByteBuffer(imageData.length);
imageBuffer.put(imageData);
imageBuffer.flip();
//imageBuffer is the right size and has the right contents
//This is where everything fails if its in a jar,
//image is set to null and the Exception is thrown
image = stbi_load_from_memory(imageBuffer, w, h, comp, 0);
if(image == null)
{
throw new Exception("Failed to load image: " + fileName);
}
return image;
}
Es kann keine falsch geschriebene Dateinamen oder Regress Pfad sein, weil es die Daten in das Array lädt richtig, egal ob es ein Glas ist oder nicht.
Weitere Informationen:
Java-Version: 1.8.0_131 64bit
Prozessorarchitektur: amd64
IDE-Version (wenn aus irgendeinem Grund erforderlich): IntelliJ 2017.01.04 Ultimative
Betriebssystem: Ubuntu 16.04 LTS 64 Bit
Kernel: Linux 4.8.0-58-generic amd64
LWJGL Version: 3.1.2
Das Projekt in Gradle gemacht 3.3
erforderlich, wenn ich werde hochladen und veröffentlichen die Link des gesamten Quellcodes
Ok ja das Problem auch nach mehr Debuggen Anscheinend sind die verdammten Arrays sind nicht die gleiche Größe schließlich gefunden (hatte es in eine Datei zu schreiben sowohl für die jar als auch für die non jar Version und überprüfe die Größe und Bytes). Sorry für die späte Antwort war im Urlaub. Danke Kumpel. – MCcomando