gpt4 book ai didi

java - 组件必须有一个有效的对等体 - BufferStrategy

转载 作者:太空宇宙 更新时间:2023-11-04 12:36:13 24 4
gpt4 key购买 nike

首先,我知道以前曾有人问过类似的问题,但似乎没有答案可以解决我的问题。

我正在开发一个小游戏,由于某种原因,每当我尝试创建新的缓冲区策略时,java都会返回IllegalStateException。我将游戏添加到 JFrame,但仍然抛出异常,以下是添加到 JFrame 的代码:

JFrame frame;


public Window(int x, int y, int width, int height, String title, boolean focus, Main game) throws IOException {
frame = new JFrame();
frame.setLocation(x, y);
frame.setSize(new Dimension(width, height));
frame.setTitle(title);
frame.add(game);
game.start();
frame.setAutoRequestFocus(focus);
frame.setFocusable(true);
frame.setVisible(true);
}

这是创建窗口的代码(位于 Main 类中):

window = new Window(x, y, WIDTH, HEIGHT, "Title", true, this);

最佳答案

我假设 createBufferStrategy() 是在 game.start() 的帧上调用的。

IllegalStateException 可能会发生,因为 JFrame 在从 JVM 外部分配资源之前并不真正存在于计算机中(或类似的东西)。

当我自己尝试 createBufferStrategy() 时,错误提示“组件必须有一个有效的对等点”。显然,对等体是操作系统或图形管理器用作绘制自定义组件的原型(prototype)的图形组件的示例版本。

我猜想,直到您的 JFrame 在操作系统中被分配给它的对等体之前,它都没有创建 BufferStrategy 所需的所有信息——JFrame 的大小可能在内部被列为 0 × 0,也许,并且在您告诉 JVM 使 Frame 显示或“有效”之前,它不会更新为宽度 × 高度。您需要在调用 game.start() 之前执行此操作。

frame.setVisible(true) 将显示框架,并显然根据需要分配对等点。之后您可以调用 game.start() 。

如果您想在不可见的 JFrame 上调用 createBufferStrategy(),请尝试使用frame.pack(),它会验证框架中的每个组件而不显示它。注意:它还会压缩框架以适合其组件 - 如果您尚未添加任何内容,或者尚未调用 setMinimumSize(),JFrame 将缩小。

关于java - 组件必须有一个有效的对等体 - BufferStrategy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37304356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com