2010-11-29 6 views
1

私はキャンバスでダブルバッファリングを使用しようとしています。私はチュートリアルをオンラインで利用し、キャンバスをインスタンス化し、そのためのバッファリングを設定するために次のコードを設定しました。私はレンダリングされたgraphiocs(ここには示されていません)を含む完全なプロセスをコーディングし、コンパイラはそれを受け入れます。Javaバッファストラテジ:コンパイラがそれを好きではない

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(); 

しかし、プログラムは、以下のコードのフラグ付き行で爆発します。ランタイムは、 "コンポーネントには有効なピアが必要です"という説明とともに、不正な状態例外をスローします。

私が知る限りでは、ソースコードは本質的にいくつかの例で見たようなものなので、ここで何が起こっているのか分かりません。どんな助けでも大歓迎です。

おかげで、

ジョンDoner

+0

質問要約に「コンパイラ」と書いたのはなぜですか? –

答えて

1

コンポーネントは、」有効なピアを持っている必要があります。

それは基本的にあなたのGUIが表示されていないか、あなたがあなたのコンポーネントを追加していないこと表示されるGUI

Swingアプリケーションに関するフォーラムでのその他の質問SwingアプリケーションでAWTコンポーネント(Canvas)を使用しないでください。 ation。 JComponentまたはJPanelでカスタムペインティングを行います。 Swingはデフォルトでダブルバッファされています。

+0

最後の3行のコードをパネルコンストラクタの外に移動しました。ちなみに、SwingでAWTコンポーネントを使用すると何が問題になりますか?私はこれまでやっている他のプログラムでは何のトラブルも経験していません。 –

+0

JDKの最新リリース(または2)(http://java.sun.com/developer/technicalArticles/GUI/mixing_components/)でのみ動作します。また、カスタムペインティングはAWTよりもSwingで異なる方法で行われますので、Swingの適切な方法を学び、2つを混在させないでください。 TereはCanvasを使用する必要はありません。 – camickr

関連する問題