2017-05-26 93 views
0

我试图使用内置的ImageIO.read(file)方法为我的lwjgl项目加载纹理。当调用ImageIO.read(文件)时程序块

创建一个新的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 Sierra上运行这个,我使用的是openGL。

这里是主类,其中新的Texture对象被初始化。

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

任何想法它可能是什么?

谢谢。

[编辑]

奇怪的是,ImageIO.read()方法的工作,如果我创建与glfwCreateWindow一个窗口之前调用它()。它与lwjgl有关,而不是文件访问。

+1

与用户目录相关的文件“brick.png”在哪里?为什么你首先使用文件而不是资源? –

+0

@HovercraftFullOfEels我想还有其他的方法来加载图像。我使用这个,因为它非常简单。 brick.png文件放置在eclipse项目文件夹(与'src'相同的文件夹)。我一直这样做,这是我第一次遇到问题。 – GriffinBabe

+0

@ CraigR8806 LWJGL不再支持SlickUtils,因为LWJGL 3 – GriffinBabe

回答

0

我找不出真正的问题,所以我试图在很多地方触发纹理构造函数。显然,如果在glfwCreateWindow()方法之前调用ImageIO.read(),所有工作都可以正常工作。

所以我只需要先加载bufferedImage,然后创建一个窗口,最后通过常规的OpenGL方法加载GPU中的纹理。

这可能是一个发布错误。我在LWJGL 3.1.2 build 29

相关问题