【问题标题】:Component must have a valid peer - BufferStrategy组件必须有一个有效的对等点 - BufferStrategy
【发布时间】:2016-09-15 05:17:03
【问题描述】:

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

我正在开发一个小游戏,由于某种原因,每当我尝试创建新的缓冲区策略时,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);

【问题讨论】:

  • game.start(); 放在frame.setVisible(true); 之后会改变什么吗?
  • @Berger 是的,谢谢!

标签: java swing bufferstrategy


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 真的很有帮助,tq
猜你喜欢
  • 1970-01-01
  • 2012-06-24
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多