当前位置: 首页 > 知识库问答 >
问题:

调用ImageIO时的程序块。读取(文件)

党权
2023-03-14

我正在尝试使用内置的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()创建窗口之前调用read()方法,则该方法可以工作。它与lwjgl有关,而与文件访问无关。

共有2个答案

程谭三
2023-03-14

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

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

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

朱运诚
2023-03-14

你在运行macOS吗?

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

 类似资料:
  • 好的,我所有的类都在几个包中:Game/src/pack 1/Class.class 我想进入一个文件:游戏/分辨率/地形。巴布亚新几内亚 我该怎么做? 然后我得到这个错误:

  • 根据API,Java的ImageIO为方法。 其中两种方法是: Oracle教程网站使用readfrom file方法。然而,我已经看到了许多由程序员编码的例子,这里更喜欢使用URL方法。 Exmaple: 我的问题是:如果我只是为Java桌面应用程序(而不是Java小程序)编写代码。与其他方法相比,使用URL方法是否有显著优势? 注意:在SO:usingurl或File(在ImageIO.rea

  • 问题内容: 这是我的第一篇文章,请问如果我做错了什么。直到我尝试从源包中读取图像,此代码才能正常运行。但是现在它无法读取任何图像。我究竟做错了什么?还是关于日食的事? 例外: 谢谢… 问题答案: 改变了,如果你使用的是Windows。 更跨平台的方法将替代 对于每对。 进一步了解File api文档 编辑 (对不起,我没有读过此行) 这段代码运行正常,直到我尝试从源包中读取图像 为了从jar包中获

  • 问题内容: 我不知道为什么这不起作用,但是程序说它无法读取输入文件。顺便说一下,这也在Ubuntu中运行: 这是示例代码: 该目录也位于程序的bin文件夹和src文件夹中。 问题答案: 如果您改为从资源流中获取图像怎么办?例如,

  • 我已经创建了可执行的jar文件(使用Eclipse),有一组图像(.png)文件要嵌入到jar中。因此,我添加了一个源文件夹,其中包含项目中文件夹中的所有图像。代码必须访问这些文件才能使用

  • 问题内容: 我想逐个读取文件。该文件分为几部分,分别存储在不同类型的媒体上。我目前要做的是调用文件的每个单独部分,然后将其合并回原始文件。 问题是我需要等到所有块都到达后才能播放/打开文件。是否有可能在块到达时读取块,而不是等待它们全部到达。 我正在处理媒体文件(电影文件)。 问题答案: 您要的是源数据线。当数据太大而无法一次将其保存在内存中时,这是完美的选择,因此您可以在接收整个文件之前开始播放