"还没有创建缓冲区"......同时创建缓冲区

Wil*_*ton 5 java swing buffer awt

我(我认为是)JFrame的直接BufferStrategy.它是这样创建的:

    // Buffer
    container.createBufferStrategy(2);           
    strategy = container.getBufferStrategy();
Run Code Online (Sandbox Code Playgroud)

但是,偶尔我收到以下错误(指向前一个片段的第一行作为违规项目):

java.lang.IllegalStateException:尚未创建缓冲区

这个错误很奇怪,因为它来来去去 - 有时它被触发,有时不会触发.我怀疑这意味着它是一个线程问题.有没有人对这里可能发生的事情有任何指示?我有点不知所措,因为我已经在尝试做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)
Run Code Online (Sandbox Code Playgroud)

cam*_*ckr 1

Swing 组件默认情况下是双缓冲的,因此无需使用 BufferStrategy。

然而,当您遇到这样的随机错误时,通常是因为代码未在 EDT 上执行。请阅读 Swing 教程中有关并发的部分以获取更多信息。

  • 我认为我的建议表明了我对使用 BufferedStrategy 的看法,我相信这在使用 AWT 时可能会有所帮助,但正如我提到的 Swing 是不同的。该教程还有一个关于“自定义绘画”的部分,您应该看看 (2认同)