I have (what I thought was) a straightforward BufferStrategy for a JFrame. It is created like so:
// Buffer
container.createBufferStrategy(2);
The frame needs to be displayable when you call createBufferStrategy
. Also as camickr has pointed out you need to call it from the EDT.
One way to ensure this is to extend JFrame
and override addNotify
:
class MyFrame extends JFrame {
public void addNotify() {
super.addNotify();
// Buffer
createBufferStrategy(2);
strategy = getBufferStrategy();
}
}
Swing components are double buffered by default, so there is no need to play around with a BufferStrategy.
However when you get random errors like that its usually because code is not executed on the EDT. Read the section from the Swing tutorial on Concurrency for more information.