createImageがnullを返す
Component#createImage()はオクスクリーン描画イメージを作成する、 ダブルバッファの際には欠かせないメソッドですが、nullを返す事が多々あります。 具体的には以下のような場合です。

			
import java.awt.*;

class TestFrame extends Frame {
    Image image;

    TestFrame() {
        image = createImage(100, 100);
    }
}

上記のコードを実行するとimageにはnullが入ります。 この後imageを参照しようとすると、当然実行時エラー(NullPointerException)が発生します。

これには「peer(ピア)」というものが影響しています。

Javaは非プラットフォーム依存のアプリケーションを作成する言語ですが、 実際の処理を行うときは各プラットフォームに依存するpeerクラスを使用しています。 createImageを呼び出すと、結局はpeer#createImage()を呼び出す訳です。 なので当然、createImageを使う時にはpeerクラスも使用可能でなくてはなりません。

しかし、peerクラスは通常利用可能になるまで作成されません。利用可能というのは、 画面に表示されるタイミングのようです。ですから、上記のコードではnullが返ってきます。

ちなみにAppletクラスなどでcreateImageを呼び出しても、nullが返ってくる事はまずありません。 これはAppletクラスでは、initメソッドが呼ばれる前にpeerの作成が完了しているためで、 普通イメージの作成はinitやコンストラクタで行いますよね。一方Frameクラスでは、 コンストラクタはpeerが作られる前に実行されます。そのため、そのままcreateImageと書いただけでは nullが返ってきてしまいます。このような問題は「peer確定問題」と呼ばれるそうです。
解決法
この問題にはいくつかの解決法があります。 ひとつはpeerの作成が行われるaddNotifyメソッドをオーバーライドする方法です。 具体的には以下のようなコードです。

	        
import java.awt.*;

class TestFrame extends Frame {
    Image image;

    public void addNotify() {
        super.addNotify();
        image = createImage(100, 100);
    }
}

上のコードでは、スーパークラスであるFrameクラスのaddNotifyを呼び出した後に createImageが実行されますから、Imageが適切に生成されます。

この他にもshow()やpack()などを呼んでもpeerが作成されるようです。