Java JPanel中的缓冲策略?

Java JPanel中的缓冲策略?,java,swing,Java,Swing,我正在尝试使用JFrame/JPanel转换一个使用Canvasto的游戏。。以前我让游戏对象扩展画布并实现Runnable 然后创建了一个JFrame并将其传递给画布 以前是什么:(作品) 但是我想在JPanel上做图形,而不是画布,并将其传递给JFrame。。但是它不起作用 public class Game extends JPanel implements Runnable{ private void render() { // TODO

我正在尝试使用JFrame/JPanel转换一个使用Canvasto的游戏。。以前我让游戏对象扩展画布并实现Runnable

然后创建了一个JFrame并将其传递给画布

以前是什么:(作品)

但是我想在JPanel上做图形,而不是画布,并将其传递给JFrame。。但是它不起作用

    public class Game extends JPanel implements Runnable{
        private void render() {
            // TODO Auto-generated method stub
            BufferStrategy bs = this.getBufferStrategy(); // error here

            if(bs==null){
                createBufferStrategy(3); //error here
                return;
            }

public static void main (String[] args){
Game game = new Game();
        game.setPreferredSize(new Dimension(WIDTH*SCALE, HEIGHT*SCALE));
        game.setMaximumSize(new Dimension(WIDTH*SCALE, HEIGHT*SCALE));
        game.setMinimumSize(new Dimension(WIDTH*SCALE, HEIGHT*SCALE));

        JFrame frame = new JFrame(game.TITLE);
        frame.add(game);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

    game.start();
}

    }


Exception in thread "Thread-1" java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.read(Unknown Source)

困惑…

您的代码甚至不应该编译。JPanel没有公共的
getBufferStrategy()
方法。因此,您应该在这一行中得到一个编译错误:

BufferStrategy bs = this.getBufferStrategy();

在Swing中,更典型的是使用缓冲策略。我认为可能只有重量级组件才可以使用BufferStrategy。

1)要更快获得更好的帮助,请发布一篇文章。2) 对代码块使用一致的逻辑缩进。代码缩进旨在帮助人们理解程序流程。+1
BufferStrategy
是一种抽象不同主机平台上的功能的方法。如果没有相反的证据,我会依赖
JComponent
继承的策略。
BufferStrategy bs = this.getBufferStrategy();