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) 为空。我想知道这种方法在Java中是否可行。

4

2 回答 2

0

如果jvm说有一个空指针,就说明这个指针是空的。使用此处的代码,只有一个解决方案是使用空指针调用的。检查堆栈跟踪,您会发现使用空对象调用此方法的位置。

如果指针为空是正常的,则可以定义默认颜色。

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

并在 drag() 方法中处理这种情况。

于 2013-04-19T20:14:56.733 回答
0

原来这是一个与 Java 完全无关的奇怪问题。枚举 Color 在另一个恰好有编译错误的类中。显然 Eclipse 将 Color 类的每个实例都视为空。

于 2013-04-19T19:58:36.860 回答