我有(我认为是)一个简单的 JFrame BufferStrategy。它是这样创建的:
// Buffer
container.createBufferStrategy(2);
strategy = container.getBufferStrategy();
但是,我偶尔会收到以下错误(它指向前面代码片段的第一行作为有问题的项目):
java.lang.IllegalStateException:缓冲区尚未创建
这个错误来来去去都很奇怪——有时会被触发,有时不会。我suspect这意味着这是一个线程问题。有人对这里可能发生的事情有任何指示吗?我有点不知所措,因为我已经在尝试做 Java 所说的事情了!
编辑:完整跟踪:
Exception in thread "main" java.lang.IllegalStateException: Buffers have not been created
at sun.awt.windows.WComponentPeer.getBackBuffer(WComponentPeer.java:877)
at java.awt.Component$FlipBufferStrategy.getBackBuffer(Component.java:3815)
at java.awt.Component$FlipBufferStrategy.updateInternalBuffers(Component.java:3800)
at java.awt.Component$FlipBufferStrategy.createBuffers(Component.java:3791)
at java.awt.Component$FlipBufferStrategy.<init>(Component.java:3730)
at java.awt.Component$FlipSubRegionBufferStrategy.<init>(Component.java:4253)
at java.awt.Component.createBufferStrategy(Component.java:3612)
at java.awt.Window.createBufferStrategy(Window.java:3015)
at java.awt.Component.createBufferStrategy(Component.java:3536)
at java.awt.Window.createBufferStrategy(Window.java:2990)
调用时框架需要可显示createBufferStrategy
。另外,正如 camickr 所指出的,您需要从 EDT 中调用它。
确保这一点的一种方法是延长JFrame
并覆盖addNotify
:
class MyFrame extends JFrame {
public void addNotify() {
super.addNotify();
// Buffer
createBufferStrategy(2);
strategy = getBufferStrategy();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)