10

我正在做一个纸牌游戏,目前有一个很好的基础,但是当我在eclipse中运行它时遇到了一个错误。我也在使用光滑的 2d。

这是来自控制台的错误。

线程“主”java.lang.RuntimeException 中的异常:在当前线程中找不到 OpenGL 上下文。在 org.lwjgl.opengl.GLContext.getCapabilities(GLContext.java:124) 在 org.lwjgl.opengl.GL11.glGetError(GL11.java:1277) 在 org.newdawn.slick.opengl.renderer.ImmediateModeOGLRenderer.glGetError(ImmediateModeOGLRenderer .java:387) 在 org.newdawn.slick.opengl.InternalTextureLoader.getTexture(InternalTextureLoader.java:275) 在 org.newdawn.slick.org.newdawn.slick.opengl.InternalTextureLoader.getTexture(InternalTextureLoader.java:337)。 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) 在 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];
    }
}

以前有人见过这种问题吗?我该如何解决?

4

5 回答 5

12

这种错误在 LWJGL 启动器中很常见。OpenGL 上下文在创建时被绑定到线程。所以你只能从同一个线程访问这个上下文。

由于看起来您不是在使用不同的线程,因此可能还有另一个原因。Slick2D 似乎需要为其Image类提供有效的 OpenGL 上下文。

所以我的第一次尝试是在初始化你的卡片图像之前初始化一个 OpenGL 上下文。

于 2013-01-15T22:16:17.007 回答
4

这发生在我身上一次,直到我意识到我在 OpenGL 初始化之前调用了图像加载器,我才知道该怎么做。确保在 OpenGL 初始化(我所做的)之前,您没有在构造函数(或任何其他调用的方法)中使用图像加载器定义任何变量。

Card您是否在初始化 OpenGL 之前定义了一个类?

希望这可以帮助。

于 2013-03-24T02:28:06.203 回答
4

在 lwjgl 3.x 及更高版本中,您可以尝试: GLContext.createFromCurrent();

如果您使用的是 libgdx,还需要在渲染线程上Gdx.app.postRunnable(...)发布一个。Runnable

于 2015-01-25T05:23:03.037 回答
2

好吧,我发现您需要在设置 OpenGL 环境之前初始化 Display :)...

于 2013-07-16T01:12:52.717 回答
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() :)

于 2016-05-10T17:02:57.383 回答