调用 ImageIO.read(file) 时程序块



我正在尝试使用内置的 ImageIO.read(file( 方法为我的 lwjgl 项目加载纹理。

创建一个新的文件对象有效,我在 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。

下面是初始化新纹理对象的主类。

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((创建窗口之前调用ImageIO.read((方法,则可以使用此方法。它与 lwjgl 有关,而不是文件访问。

你运行的是macOS吗?

"ImageIO初始化AWT。问题是 GLFW 和 AWT 事件循环无法在 macOS 上的主/第一个线程中同时运行"http://forum.lwjgl.org/index.php?topic=6527.0

我无法找出真正的问题,所以我尝试在很多地方触发纹理构造函数。显然,如果您在glfwCreateWindow((方法之前调用ImageIO.read((则一切正常。

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

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

最新更新