2017-05-26 2 views
0

私は、組み込みImageIO.read(file)メソッドを使用して、lwjglプロジェクトのテクスチャを読み込もうとしています。ImageIO.read(file)を呼び出すときのプログラムブロック

新しいFileオブジェクトを作成すると、ImageIO.read()メソッドに問題があります。

public Texture(String fileName) { 

System.out.println("Texture init called"); 

try { 
    File img = new File("brick.png"); 
    System.out.println(img.exists()); //Returns true 
    System.out.println(img.getAbsolutePath()); //Returns the correct path "/Users/griffinbabe/Documents/workspace/LWJGLTest/brick.png" 
    System.out.println(img.canRead()); //Returns true 
    Image im = ImageIO.read(img); //Blocks here, letting no printStackTrace, and letting the program running. 
    System.out.println("Yes you did it!"); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

これは私が問題に遭遇したことがないのは奇妙です。それが助けることができるなら、私はMac OS X Sierraでこれを実行しており、私はOpenGLを使用しています。

ここでは、新しいテクスチャオブジェクトが初期化されるメインクラスがあります。

public Window(int sizeX, int sizeY,Game game) { 
    this.game = game; 

    if (!glfwInit()) { 
     throw new IllegalStateException("GLFW failed to initialize."); 
    } 

    window = glfwCreateWindow(sizeX,sizeY,"Game3Graphics",0,0); 

    glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); 

    if (window == 0) { 
     throw new IllegalStateException("Failed to create window."); 
    } 

    GLFWVidMode videoMode = glfwGetVideoMode(glfwGetPrimaryMonitor()); 
    glfwSetWindowPos(window, (videoMode.width()-sizeX)/2, (videoMode.height()-sizeY)/2); 

    glfwShowWindow(window); 

    glfwMakeContextCurrent(window); 

    GL.createCapabilities(); 

    glEnable(GL_TEXTURE_2D); 

    Texture texture = new Texture("brick.png"); //Here is the init call. 

    System.out.println("texture finished loading"); 

どのような考えがありますか?

ありがとうございます。

私はglfwCreateWindow(を持つウィンドウを作成する前にそれを呼び出す場合は、[EDIT]

は不思議なことに、ImageIO.read()メソッド)が動作します。それはlwjglと関係があり、ファイルへのアクセスではありません。

+1

ファイル "brick.png"はユーザーディレクトリに関してどこですか?なぜあなたはリソースではなく最初の場所でファイルを使用していますか? –

+0

@HovercraftFullOfEels画像をロードする他の方法があると思います。私はこれを使用しています。なぜなら、それはかなりシンプルです。 brick.pngファイルはEclipseプロジェクトフォルダ( 'src'と同じフォルダ)に配置されます。私はいつもこのようにしていましたが、これが初めて問題になっています。 – GriffinBabe

+0

@ CraigR8806 SlickUtilsはLWJGLではもうサポートされていません。なぜなら、LWJGL 3 – GriffinBabe

答えて

0

実際の問題を把握することができなかったので、多くの場所でテクスチャコンストラクタを起動しようとしました。どうやら、glfwCreateWindow()メソッドの前にImageIO.read()を呼び出すと、すべて正常に動作します。

まず、bufferedImageをロードしてから、ウィンドウを作成して、通常のOpenGLメソッドでGPUにテクスチャをロードするだけです。

これはおそらくリリースバグです。私はLWJGL 3.1.2ビルド29にあります

関連する問題