0

匿名の内部クラスを使用して、プログラム内のオブジェクトに対するマウス アクションを処理したいと考えています。ただし、パラメーターによっては、内部クラスの動作が異なるようにしたいと考えています。例えば:

Rectangle r1 = rectangleBuilder (Color.Red);
Rectangle r2 = rectangleBuilder (Color.Blue);

public Rectangle rectangleBuilder (final Color c) {
    r = new Rectangle (100, 100, c);

    r.dragListener = new DragListener () {
        @Override
        public void drag (double x, double y) {
            if (c == Color.Red) {
                r.setPosition (x, y);
            }
            if (c == Color.Blue) {
                r.setPosition (2 *x, 2 *y);
            }
        }
    }

    return r;
}

アイデアは、オブジェクトを作成するときに、ドラッグしたときの動作がその色によって決定されるということです。これは正常に機能していましたが、何らかの理由で c (Color) が null であるという例外が発生しています。この種のアプローチがJavaで可能かどうか疑問に思っています。

4

2 に答える 2

0

Java とはまったく関係のない奇妙な問題であることが判明しました。列挙型 Color は、たまたまコンパイル エラーが発生した別のクラスにありました。どうやら Eclipse は Color クラスのすべてのインスタンスを null として扱っていたようです。

于 2013-04-19T19:58:36.860 に答える
0

jvm がヌル ポインターがあると言う場合、それはポインターがヌルであることを意味します。ここのコードでは、null ポインターで呼び出すソリューションは 1 つしかありません。スタックトレースを確認すると、null オブジェクトでこのメソッドを呼び出した場所がわかります。

ポインターが null であることが正常な場合は、デフォルトの色を定義できます。

if (c == null)
    r = new Rectangle(100, 100, Color.black);

このケースは drag() メソッドで処理します。

于 2013-04-19T20:14:56.733 に答える