Java 组件必须具有有效的对等缓冲策略
首先,我知道以前有人问过这样的问题,但似乎没有答案能解决我的问题 我正在开发一个小游戏,出于某种原因,每当我尝试创建一个新的缓冲策略时,java都会返回一个IllegalStateException。我正在将游戏添加到JFrame,但仍会引发异常,以下是添加到JFrame的代码:Java 组件必须具有有效的对等缓冲策略,java,swing,bufferstrategy,Java,Swing,Bufferstrategy,首先,我知道以前有人问过这样的问题,但似乎没有答案能解决我的问题 我正在开发一个小游戏,出于某种原因,每当我尝试创建一个新的缓冲策略时,java都会返回一个IllegalStateException。我正在将游戏添加到JFrame,但仍会引发异常,以下是添加到JFrame的代码: JFrame frame; public Window(int x, int y, int width, int height, String title, boolean focus, Main game) th
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);
}
下面是创建窗口(位于主类中)的代码:
我假设createBufferStrategy()是在game.start()的帧上调用的 发生IllegalStateException可能是因为在从JVM外部为JFrame分配资源之前,JFrame实际上不存在于计算机中(或类似的东西) 当我自己尝试创建BufferStrategy()时,错误是“组件必须有一个有效的对等方”。显然,对等点是图形组件的示例版本,OS或graphics manager将其用作绘制自定义组件的原型 我猜,在操作系统中为JFrame分配了对等对象之前,它并没有制定缓冲策略所需的所有信息——JFrame的大小可能会在内部以0×0的形式列出,并且在告诉JVM使框架可显示或“有效”之前,它不会按高度更新为宽度。您需要在调用game.start()之前执行此操作 setVisible(true)将显示帧,并根据需要分配对等点。之后可以调用game.start()
如果要在不可见的JFrame上调用createBufferStrategy(),请尝试frame.pack(),它将验证框架中的每个组件,而不显示它。注意:它也会压缩框架以适应其组件——如果您还没有添加任何内容,或者还没有调用setMinimumSize(),JFrame将收缩。会压缩
game.start()代码>在frame.setVisible之后(true)代码>有什么变化吗?@Berger是的,有,谢谢!真的很有帮助,tq
window = new Window(x, y, WIDTH, HEIGHT, "Title", true, this);