Java缓冲区策略:编译器不';我不喜欢

Java缓冲区策略:编译器不';我不喜欢,java,double-buffering,Java,Double Buffering,我正在尝试对画布使用双缓冲,这是我以前从未做过的。我利用了在线教程,设置了以下代码来实例化画布并为其设置缓冲。我编写了完整的过程,包括呈现图形(此处未显示),编译器接受它 volCanvas = new VolCanvas(); volCanvas.setBackground(Color.black); volCanvas.setBounds(10, 380, 1180, 125); add(volCanvas); volCanvas.createBufferStrategy(2);

我正在尝试对画布使用双缓冲,这是我以前从未做过的。我利用了在线教程,设置了以下代码来实例化画布并为其设置缓冲。我编写了完整的过程,包括呈现图形(此处未显示),编译器接受它

 volCanvas = new VolCanvas();
 volCanvas.setBackground(Color.black);
 volCanvas.setBounds(10, 380, 1180, 125);
 add(volCanvas);
 volCanvas.createBufferStrategy(2);            (Program blows up here)
 offScreen = volCanvas.getBufferStrategy();
 ofsg = (Graphics2D) offScreen.getDrawGraphics();
但是程序在下面代码中的标记行爆炸。运行时抛出非法状态异常,解释为“组件必须具有有效的对等方”

据我所知,源代码基本上与我在几个示例中看到的一样,所以我不知道这里发生了什么。任何帮助都将不胜感激

谢谢

约翰·多纳

组件必须具有有效的对等方”

这基本上意味着您的GUI不可见,或者您没有将组件添加到可见的GUI中

论坛上的其他问题涉及Swing应用程序。您不应该在Swing应用程序中使用AWT组件(画布)。在JComponent或JPanel上进行自定义绘制。Swing默认为双缓冲

组件必须具有有效的对等方”

这基本上意味着您的GUI不可见,或者您没有将组件添加到可见的GUI中


您在论坛上的其他问题涉及Swing应用程序。您不应该在Swing应用程序中使用AWT组件(画布)。在JComponent或JPanel上进行自定义绘制。Swing默认为双缓冲。

为什么在问题摘要中编写“编译器”?为什么在问题摘要中编写“编译器”?我将最后3行代码移出了面板构造函数,现在它可以工作了。顺便问一下,在Swing中使用AWT组件有什么问题?我从来没有遇到过与我所做的其他程序的任何问题。它只在JDK的最新版本(或2)中起作用:。此外,定制绘画在Swing中的完成方式与在AWT中的不同,因此请学习正确的Swing方式,不要将两者混用。Tere不需要使用画布。我将最后3行代码移出了面板构造函数,现在它可以工作了。顺便问一下,在Swing中使用AWT组件有什么问题?我从来没有遇到过与我所做的其他程序的任何问题。它只在JDK的最新版本(或2)中起作用:。此外,定制绘画在Swing中的完成方式与在AWT中的不同,因此请学习正确的Swing方式,不要将两者混用。Tere不需要使用画布。