Примечание для закрытия избирателей с зудящими триггерными пальцами - это НЕ дубликат «Что такое исключение NullPointerException». Прочтите весь вопрос до голосования, чтобы закрыть его.GL.createCapabilities throws NullPointerException
Я сделал класс для создания окна с использованием библиотеки LWJGL3. Я пытаюсь создать окно в модульном тесте с этим классом, но он выдает исключение NullPointerException при вызове метода GL.createCapabilities(). Я использую Intellij IDEA с gradle и Debian 8.
Это не дубликат того, что является NullPointerException, поскольку я пытаюсь найти причину, по которой библиотека LWJGL3 выбрасывает это исключение, и я знаю, что это такое исключение.
Я уже искал в Google, и я не нашел, почему это может произойти. Я попытался удалить пакет libgl1-mesa-dev
, и он не сработал.
Это трассировка стека.
java.lang.NullPointerException
at java.util.regex.Matcher.getTextLength(Matcher.java:1283)
at java.util.regex.Matcher.reset(Matcher.java:309)
at java.util.regex.Matcher.<init>(Matcher.java:229)
at java.util.regex.Pattern.matcher(Pattern.java:1093)
at org.lwjgl.system.APIUtil.apiParseVersion(APIUtil.java:140)
at org.lwjgl.system.APIUtil.apiParseVersion(APIUtil.java:122)
at org.lwjgl.opengl.GL.createCapabilities(GL.java:278)
at org.lwjgl.opengl.GL.createCapabilities(GL.java:226)
at com.advancid.minage.gui.Window.makeCurrentContext(Window.java:85)
at com.advancid.minage.gui.Window.<init>(Window.java:19)
at com.advancid.minage.gui.WindowTest.workForOneWindow(WindowTest.java:9)
Вот мой класс испытаний единицы измерения.
package com.advancid.minage.gui;
import org.junit.Test;
public class WindowTest {
@Test
public void workForOneWindow() {
Window window = new Window("My window", 1280, 720);
window.show();
window.makeCurrentContext();
window.update();
window.destroy();
}
}
И вот мой класс окон.
package com.advancid.minage.gui;
import org.lwjgl.BufferUtils;
import org.lwjgl.glfw.GLFW;
import org.lwjgl.opengl.GL;
import org.lwjgl.opengl.GLCapabilities;
import org.lwjgl.system.MemoryUtil;
import java.nio.IntBuffer;
public class Window {
private long handle;
private GLCapabilities capabilities = null;
public Window(String title, int width, int height) {
GLFW.glfwDefaultWindowHints();
this.handle = GLFW.glfwCreateWindow(width, height, title, MemoryUtil.NULL, MemoryUtil.NULL);
this.makeCurrentContext();
}
public void show() {
GLFW.glfwShowWindow(this.handle);
}
public void hide() {
GLFW.glfwHideWindow(this.handle);
}
public boolean shouldClose() {
return GLFW.glfwWindowShouldClose(this.handle) == GLFW.GLFW_TRUE;
}
public void resize(int width, int height) {
GLFW.glfwSetWindowSize(this.handle, width, height);
}
public int[] getSize() {
IntBuffer widthBuffer = BufferUtils.createIntBuffer(1);
IntBuffer heightBuffer = BufferUtils.createIntBuffer(1);
GLFW.glfwGetWindowSize(this.handle, widthBuffer, heightBuffer);
return new int[] { widthBuffer.get(), heightBuffer.get() };
}
public int getWidth() {
return getSize()[0];
}
public int getHeight() {
return getSize()[1];
}
public void setPosition(int x, int y) {
GLFW.glfwSetWindowPos(this.handle, x, y);
}
public int[] getPosition() {
IntBuffer xBuffer = BufferUtils.createIntBuffer(1);
IntBuffer yBuffer = BufferUtils.createIntBuffer(1);
GLFW.glfwGetWindowPos(this.handle, xBuffer, yBuffer);
return new int[] { xBuffer.get(), yBuffer.get() };
}
public int getX() {
return getPosition()[0];
}
public int getY() {
return getPosition()[1];
}
public void destroy() {
GLFW.glfwDestroyWindow(this.handle);
}
public void makeCurrentContext() {
GLFW.glfwMakeContextCurrent(this.handle);
GLFW.glfwSwapInterval(1);
if (this.capabilities == null) {
this.capabilities = GL.createCapabilities();
} else {
GL.setCapabilities(this.capabilities);
}
}
public void update() {
GLFW.glfwSwapBuffers(this.handle);
GLFW.glfwPollEvents();
}
}
Можете ли вы добавить Stack trace of exception? – PVR
Возможный дубликат [Что такое исключение NullPointerException и как его исправить?] (Http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – Tom
@Tom Это не дубликат этого вопроса, так как это библиотека сторонних разработчиков, которая генерирует это исключение, и я знаю, что такое NullPointerException. –