2016-06-22 12 views
-1

私はMac OS xを使用しています。私のIDEはIntellijです。何らかの理由で、このコードを実行しようとするとエラーが発生します。コードはlwjglのゲームエンジンです。GLFWエンジンとメインスレッドの問題IntelliJ

import org.lwjgl.glfw.*; 
import org.lwjgl.opengl.*; 

import static org.lwjgl.glfw.GLFW.*; 
import static org.lwjgl.opengl.GL11.*; 
import static org.lwjgl.system.MemoryUtil.*; 
import static org.lwjgl.glfw.Callbacks.*; 
import org.lwjgl.*; 

import java.awt.*; 
import java.util.*; 
import java.text.DateFormat; 
import java.applet.Applet; 

public class Main implements Runnable{ 

private int width = 1280; 
private int height =720; 
private String title = "Flappy"; 

private boolean running = false; 
private Thread thread; 
private long window; 

public void start(){ 
    running = true; 

    thread = new Thread(this, "Display"); 
    //this will call the run method that we created below by using our implemented Runnable 
    thread.start(); 
} 

public void run(){ 
    init(); 
    running = true; 
     while(running){ 
     update(); 
     render(); 
     if(glfwWindowShouldClose(window)){ 
      running = false; 
     } 
    } 
} 

//init initializes all of our stuff 
private void init(){ 

    if(!glfwInit()){ 
     throw new IllegalStateException("Unable to initialize GLFW YOOO"); 
    } 

    // Configure our window 
    glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); // the window will stay hidden after creation 
    glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); // the window will be resizable 

    window = glfwCreateWindow(width, height, title, NULL, NULL); 

    if(window == NULL){ 
     throw new RuntimeException("Failed to create the GLFW window"); 
    } 


    GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor()); 
    glfwSetWindowPos(window, (vidmode.width() - width)/2, (vidmode.height() - height)/2); 
    // Make the OpenGL context current 
    glfwMakeContextCurrent(window); 
    // Enable v-sync 
    glfwSwapInterval(1); 

    // Make the window visible 
    glfwShowWindow(window); 

} 



public void update(){ 
    glfwPollEvents(); 
} 

public void render(){ 
    glfwSwapBuffers(window); 
} 


public static void main(String[] args){ 
    new Main().start(); 
} 
} 

一部の記事を読む私は、-XstartOnFirstThreadを編集およびプログラム引数に追加しようとしましたが、それは助けになりませんでした。以下の場合は私のエラーです。もし誰かが助けてくれれば、ありがとう...再びIntellijでMacを使う。

Caused by: java.lang.IllegalStateException: GLFW windows may only be created on the main thread and that thread must be the first thread in the process. Please run the JVM with -XstartOnFirstThread. For offscreen rendering, make sure another window toolkit (e.g. AWT or JavaFX) is initialized before GLFW. 
+1

可能な複製[GLFWウィンドウのクラッシュ "-XstartOnFirstThread"でVMの引数](http://stackoverflow.com/questions/37333723/glfw-window-crashing-even-with-xstartonfirstthread-in-vm-arguments) – CConard96

+0

どのようにもっと具体的にすることはできますか?この問題は別の投稿で解決されました。私がそこに提供した答えは、かなり自明です。 – CConard96

+0

メインスレッド上ですべて実行するように変更しました。 https://www.lwjgl.org/guideにはまだ同じエラーが表示されています。 – Boo

答えて

0

あなたが得た例外がGLFW Windowを作成するためにglfwCreateWindow()を呼び出して、あなたのinit()方法はmain threadから呼び出されるべきで、問題について非常に明確である:エラーが下に追加されます。したがって、init()メソッドをpublicにしてrun()メソッド内でinit();コールを削除してください。代わりにmainメソッドをこれに変更してください。

public static void main(String[] args){ 
    Main main = new Main(); 
    main.init(); 
    main.start(); 
} 
+0

これを行いました。依然として同じエラー – Boo

2

Intellij 2017.1.3で同じエラーが発生しました。 Mac OS 10.12.4; LWJGL-リリース3.1

これは、クリックメニューによって解決 - ...>編集設定して、パラメータを追加-XstartOnFirstThread VMオプションの横にあるテキストボックスに - ラン:

スクリーン印刷: enter image description here

関連する問題