• 締切済み

ダブルバッファリングについて

Javaで時計を作成していますが、 裏画面への作画がうまくいきません。 コンパイルはできますが、実行すると以下のエラーがでます。  Exception in thread "main" java.lang.NullPointerException   at AnalogClock.<init>(AnalogClock.java:22)   at AnalogClock.main(AnalogClock.java:54) オブジェクトが必要なときに、アプリケーションがnullを返すと、この例外がでることはわかりましたが、どうしてアプリケーションがnullを返すのかがわからず困っています。 プログラムは、表画面に直接表示するとちゃんとでます。 どなたか教えて頂けるとうれしいです。よろしくお願いします。 7)public class AnalogClock extends Frame implements Runnable { 8) 9) Calendar cal; 10) Image backimg; 11) Graphics bg; 中略 19) AnalogClock() { 20)//ダブルバッファリング用裏画面 21) backimg = createImage(width,height); 22) bg = backimg.getGraphics(); 23) setBackground(Color.black); 24) } 25) 26) public void paint(Graphics g) { 27)//カレンダーの取得(時・分・秒) 28) cal = Calendar.getInstance(); 29) hour = cal.get(cal.HOUR); 30) min = cal.get(cal.MINUTE); 31) sec = cal.get(cal.SECOND); 32)//時計の文字盤を作画 33) //文字盤の作画開始座標 34) x = 50; 35) y = 50; 36) //文字盤の直径 37) across = 200; 38) bg.setColor(Color.yellow); 39) bg.fillOval(x,y,across,across); 40)//裏画面のイメージを面画面に作画 41) g.drawImage(backimg,0,0,null); 42) } 中略 53) public static void main(String[] args) { 54) final AnalogClock ac = new AnalogClock(); 55) Thread th = new Thread(ac); 56) th.start(); 57) ac.setSize(300,300); 58) ac.setVisible(true); 以下略 (左の数字は行数です)

みんなの回答

  • takaP-
  • ベストアンサー率79% (83/105)
回答No.1

フレームの描画前にグラフィックを取得しようと した為だと思います。 コンストラクタではなくフレームの描画後に ダブルバッファリングの操作をしてみて下さい。 プログラムによって記述部分も違ってくるでしょうが show()やsetVisible()をオーバーライドするとかで いいのではないかと(かなり適当だけど・笑) public void show() {   super.show() ;   backImage = createImage(width,height);   bg = backImage.getImage(); } とかなんとか適当に、、、(汗

senzin
質問者

お礼

お礼が遅くなって申し訳ありません。 有り難うございました。 勉強になりました。

関連するQ&A