我正在制作纸牌游戏,目前有一个很好的基础,但是当我在eclipse中运行它时遇到了错误。我也使用光滑的2d。
以下是控制台的错误。
线程“main”中的异常java.lang.RuntimeException:没有OpenGL 在当前线程中找到的上下文。在 或者.gwon。 org.lwjgl.opengl.GL11.glGetError(GL11.java:1277)at at org.newdawn.slick.opengl.renderer.ImmediateModeOGLRenderer.glGetError(ImmediateModeOGLRenderer.java:387) 在 org.newdawn.slick.opengl.InternalTextureLoader.getTexture(InternalTextureLoader.java:337) 在 org.newdawn.slick.opengl.InternalTextureLoader.getTexture(InternalTextureLoader.java:275) 在org.newdawn.slick.Image。(Image.java:270)at org.newdawn.slick.Image。(Image.java:244)at org.newdawn.slick.Image。(Image.java:232)at org.newdawn.slick.Image。(Image.java:198)at Cards.Card。(Card.java:18)
代码,我相信发生错误的来源(卡类)
package Cards;
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
public class Card
{
final int numCards = 52;
Image[] card = new Image [numCards];
Card (int c)
{
String fileLocation = new String ();
for (int i = 1 ; i <= 52 ; i++)
{
fileLocation = "res/cards/" + i + ".png";
try
{
card [i] = new Image (fileLocation); //line
}
catch (SlickException e)
{
e.printStackTrace ();
}
}
}
public Image getImage (int cardlocation)
{
return card [cardlocation];
}
}
以前有人见过这种问题吗?我该如何解决?
答案 0 :(得分:10)
这种错误在LWJGL初学者中很常见。 OpenGL上下文在创建时绑定到一个线程。因此,您只能从同一个线程访问此上下文。
因为看起来你不是在使用不同的线程,所以可能还有其他原因。 Slick2D似乎需要为其Image
类提供有效的OpenGL上下文。
所以我的第一次尝试是在初始化卡片图像之前初始化OpenGL上下文。
答案 1 :(得分:4)
这件事发生在我身上,直到我意识到在OpenGL初始化之前我正在调用图像加载器之前,我无法弄清楚要做什么。在OpenGL inits(我做了什么)之前,确保你没有在构造函数(或任何其他调用的方法)中使用图像加载器定义任何变量。
您是否在初始化OpenGL之前定义了Card
类?
希望这有帮助。
答案 2 :(得分:4)
在lwjgl 3.x及更高版本中,您可以尝试:
GLContext.createFromCurrent();
如果你正在使用libgdx,还有Gdx.app.postRunnable(...)
在渲染线程上发布Runnable
。
答案 3 :(得分:2)
嗯,我发现你需要在设置OpenGL环境之前初始化你的显示器:)...
答案 4 :(得分:2)
一个旧线程,但它可能对某人有帮助。 根据您使用的LWJGL,启动显示:
LWJGL 3 (使用GLFW):
if (!glfwInit()) {
throw new IllegalStateException("Can't init GLFW");
}
LWJGL 2 :
try {
Display.setDisplayMode(new DisplayMode(800, 600));
Display.create();
} catch (LWJGLException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
我,大多数情况下,忘了 Display.create():)