2013-01-15 8 views
9

私はカードゲームに取り組んでいますが、現在は良い基盤を持っていますが、私はEclipseで実行するとエラーに陥っています。私も滑らかな2dを使用しています。現在のスレッドでOpenGLコンテキストが見つかりませんでしたが、このエラーを修正するにはどうすればよいですか?

ここはコンソールからのエラーです。

スレッド "main"の例外java.lang.RuntimeException:No OpenGL コンテキストが現在のスレッドに見つかりました。 org.newdawn.slick.opengl.renderer.ImmediateModeOGLRendererで org.lwjgl.opengl.GL11.glGetError(GL11.java:1277)で org.lwjgl.opengl.GLContext.getCapabilities(GLContext.java:124)で。 org.newdawn.slick.opengl.InternalTextureLoader.getTexture(InternalTextureLoader.java:275)でglGetError(ImmediateModeOGLRenderer.java:387) でorg.newdawn.slick.opengl.InternalTextureLoader.getTexture(InternalTextureLoader.java:337) at org.newdawn.slick.Image。(Image.java:270) org.newdawn.slick.Image。(Image.java:244)at org.newdawn.slick.Image。(Image.java:232) ) 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]; 
    } 
} 

は誰もが前にこの種の問題を見ている(カードのクラス)occuringしますか?どうすれば解決できますか?

答えて

10

この種のエラーは、LWJGLのスターターによく見られます。 OpenGLコンテキストは、作成時にスレッドにバインドされます。したがって、同じスレッドからのみこのコンテキストにアクセスできます。

異なるスレッドで作業しているように見えないため、別の原因が考えられます。 Slick2DはImageクラスのために有効なOpenGLコンテキストが必要なようです。

私の最初の試みは、カードイメージを初期化する前にOpenGLコンテキストを初期化することです。

4

これは私に一度だけ起こりました。私はOpenGLが初期化される前にイメージローダーを呼び出していることを認識するまで何をすべきか分かりませんでした。 OpenGLのinits(私がやったこと)の前に、コンストラクタ(あるいは、呼び出される他のメソッド)内の画像ローダで変数を定義していないことを確認してください。

OpenGLが初期化される前にCardクラスを定義していますか?

これが役に立ちます。

+1

明確かつ簡潔な答え。ありがとう! +1 –

2

さて、私が見つけたことはあなたがあなたのOpenGL環境を設定する前に、あなたの表示を初期化する必要があるということです。)... LWJGL 3.x以上で

3

、あなたが試すことができます: GLContext.createFromCurrent();

libgdxを使用している場合はと表示され、Runnableがレンダリングスレッドに投稿されます。

+0

2番目の解決策はlibgdxでのみ動作し、lwjglでは問題ありません。 – javac

+0

@javac良い点、それを言及する更新された解決策。 – EntangledLoops

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); 
} 

I、ほとんどは、忘れてDisplay.create() :)

関連する問題