0

我有一个监听器接口:

public interface AnimationListener 
{
    public void onAnimationStarted(Animation animation);
    public void onAnimationFinished(Animation animation);
    public void onAnimationCanceled(Animation animation);
}

此类保留一个列表:

public class AnimationManager 
{
    private List<Animation> animations;
    private List<AnimationListener> animationListeners;
    private List<Animation> animationsToRemove;
    private float rate;

    public AnimationManager(float rate)
    {
        setRate(rate);
    }

    public void addAnimationListener(AnimationListener listener)
    {
        animationListeners.add(listener);
    }

    public void removeAnimationListener(AnimationListener listener)
    {
        animationListeners.remove(listener);
    }
...

这个类实现了接口:

public class PuzzleView extends SurfaceView implements Runnable, AnimationListener { ... private AnimationManager animationManager = null;

...

public PuzzleView(Context context) 
{
            ...
    animationManager = new AnimationManager(FRAME_RATE);
    //animationManager.addAnimationListener(this); THIS CRASHES
}

当我添加动画侦听器时,它崩溃了。有什么问题?

谢谢

在 dalvik.system.NativeStart.main(Native Method) 09-21 19:15:51.453: E/AndroidRuntime(278): 引起:java.lang.NullPointerException 09-21 19:15:51.453: E/AndroidRuntime(278) ): 在 com.joshl.drop7.AnimationManager.addAnimationListener(AnimationManager.java:19) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 com.joshl.drop7.PuzzleView.(PuzzleView.java:82 ) 09-21 19:15:51.453: E/AndroidRuntime(278): at com.joshl.drop7.Game.onCreate(Game.java:18) 09-21 19:15:51.453: E/AndroidRuntime(278):在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 09-21 19 :15:51.453: E/AndroidRuntime(278): ... 11 更多 09-21 19:15:53.333: I/Process(278): 发送信号。PID:278 SIG:9 system.NativeStart.main(Native Method) 09-21 19:15:51.453: E/AndroidRuntime(278): 由: java.lang.NullPointerException 09-21 19:15:51.453: E/AndroidRuntime(278): at com.joshl.drop7.AnimationManager.addAnimationListener(AnimationManager.java:19) 09-21 19:15:51.453: E/AndroidRuntime(278): at com.joshl.drop7.PuzzleView.(PuzzleView.java:82) 09- 21 19:15:51.453: E/AndroidRuntime(278): 在 com.joshl.drop7.Game.onCreate(Game.java:18) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 android。 app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 09-21 19:15: 51.453: E/AndroidRuntime(278): ... 11 更多 09-21 19:15:53.333: I/Process(278): 发送信号。PID:278 SIG:9 system.NativeStart.main(Native Method) 09-21 19:15:51.453: E/AndroidRuntime(278): 由: java.lang.NullPointerException 09-21 19:15:51.453: E/AndroidRuntime(278): at com.joshl.drop7.AnimationManager.addAnimationListener(AnimationManager.java:19) 09-21 19:15:51.453: E/AndroidRuntime(278): at com.joshl.drop7.PuzzleView.(PuzzleView.java:82) 09- 21 19:15:51.453: E/AndroidRuntime(278): 在 com.joshl.drop7.Game.onCreate(Game.java:18) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 android。 app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 09-21 19:15: 51.453: E/AndroidRuntime(278): ... 11 更多 09-21 19:15:53.333: I/Process(278): 发送信号。PID:278 SIG:9 主要(本机方法)09-21 19:15:51.453:E/AndroidRuntime(278):由:java.lang.NullPointerException 09-21 19:15:51.453:E/AndroidRuntime(278):在 com.joshl。 drop7.AnimationManager.addAnimationListener(AnimationManager.java:19) 09-21 19:15:51.453: E/AndroidRuntime(278): at com.joshl.drop7.PuzzleView.(PuzzleView.java:82) 09-21 19:15 :51.453: E/AndroidRuntime(278): 在 com.joshl.drop7.Game.onCreate(Game.java:18) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 android.app.Instrumentation。 callActivityOnCreate(Instrumentation.java:1047) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 09-21 19:15:51.453: E/ AndroidRuntime(278): ... 11 更多 09-21 19:15:53.333: I/Process(278): 发送信号。PID:278 SIG:9 主要(本机方法)09-21 19:15:51.453:E/AndroidRuntime(278):由:java.lang.NullPointerException 09-21 19:15:51.453:E/AndroidRuntime(278):在 com.joshl。 drop7.AnimationManager.addAnimationListener(AnimationManager.java:19) 09-21 19:15:51.453: E/AndroidRuntime(278): at com.joshl.drop7.PuzzleView.(PuzzleView.java:82) 09-21 19:15 :51.453: E/AndroidRuntime(278): 在 com.joshl.drop7.Game.onCreate(Game.java:18) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 android.app.Instrumentation。 callActivityOnCreate(Instrumentation.java:1047) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 09-21 19:15:51.453: E/ AndroidRuntime(278): ... 11 更多 09-21 19:15:53.333: I/Process(278): 发送信号。PID:278 SIG:9 E/AndroidRuntime(278): 引起: java.lang.NullPointerException 09-21 19:15:51.453: E/AndroidRuntime(278): at com.joshl.drop7.AnimationManager.addAnimationListener(AnimationManager.java:19) 09- 21 19:15:51.453: E/AndroidRuntime(278): 在 com.joshl.drop7.PuzzleView.(PuzzleView.java:82) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 com.joshl .drop7.Game.onCreate(Game.java:18) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 09-21 19:15 :51.453: E/AndroidRuntime(278): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 09-21 19:15:51.453: E/AndroidRuntime(278): ... 11 更多 09-21 19 :15:53.333: I/Process(278): 发送信号。PID:278 SIG:9 E/AndroidRuntime(278): 引起: java.lang.NullPointerException 09-21 19:15:51.453: E/AndroidRuntime(278): at com.joshl.drop7.AnimationManager.addAnimationListener(AnimationManager.java:19) 09- 21 19:15:51.453: E/AndroidRuntime(278): 在 com.joshl.drop7.PuzzleView.(PuzzleView.java:82) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 com.joshl .drop7.Game.onCreate(Game.java:18) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 09-21 19:15 :51.453: E/AndroidRuntime(278): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 09-21 19:15:51.453: E/AndroidRuntime(278): ... 11 更多 09-21 19 :15:53.333: I/Process(278): 发送信号。PID:278 SIG:9 51.453: E/AndroidRuntime(278): 在 com.joshl.drop7.AnimationManager.addAnimationListener(AnimationManager.java:19) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 com.joshl.drop7.PuzzleView .(PuzzleView.java:82) 09-21 19:15:51.453: E/AndroidRuntime(278): at com.joshl.drop7.Game.onCreate(Game.java:18) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java :2627) 09-21 19:15:51.453: E/AndroidRuntime(278): ... 11 更多 09-21 19:15:53.333: I/Process(278): 发送信号。PID:278 SIG:9 51.453: E/AndroidRuntime(278): 在 com.joshl.drop7.AnimationManager.addAnimationListener(AnimationManager.java:19) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 com.joshl.drop7.PuzzleView .(PuzzleView.java:82) 09-21 19:15:51.453: E/AndroidRuntime(278): at com.joshl.drop7.Game.onCreate(Game.java:18) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java :2627) 09-21 19:15:51.453: E/AndroidRuntime(278): ... 11 更多 09-21 19:15:53.333: I/Process(278): 发送信号。PID:278 SIG:9 在 com.joshl.drop7.PuzzleView.(PuzzleView.java:82) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 com.joshl.drop7.Game.onCreate(Game.java:18) 09 -21 19:15:51.453: E/AndroidRuntime(278): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 android.app .ActivityThread.performLaunchActivity(ActivityThread.java:2627) 09-21 19:15:51.453: E/AndroidRuntime(278): ... 11 更多 09-21 19:15:53.333: I/Process(278): 发送信号. PID:278 SIG:9 在 com.joshl.drop7.PuzzleView.(PuzzleView.java:82) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 com.joshl.drop7.Game.onCreate(Game.java:18) 09 -21 19:15:51.453: E/AndroidRuntime(278): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 android.app .ActivityThread.performLaunchActivity(ActivityThread.java:2627) 09-21 19:15:51.453: E/AndroidRuntime(278): ... 11 更多 09-21 19:15:53.333: I/Process(278): 发送信号. PID:278 SIG:9 E/AndroidRuntime(278): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 09-21 19:15:51.453: E/AndroidRuntime(278): ... 11 更多 09-21 19:15: 53.333:I/Process(278):发送信号。PID:278 SIG:9 E/AndroidRuntime(278): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 09-21 19:15:51.453: E/AndroidRuntime(278): ... 11 更多 09-21 19:15: 53.333:I/Process(278):发送信号。PID:278 SIG:9

4

2 回答 2

2

看起来您从未在 AnimationManager 类中初始化任何列表。您应该在 AnimationManager 构造函数中为每个列表添加类似的内容:

animationListeners = new ArrayList<AnimationListener>();
于 2012-09-21T19:30:31.233 回答
0

尝试使用:

public class PuzzleView implements AnimationListener {
....
public PuzzleView(Context context) 
{
            ...
    animationManager = new AnimationManager(FRAME_RATE);
    animationManager.addAnimationListener(this); 
}
.....

或者

public PuzzleView(Context context) 
{
            ...
    animationManager = new AnimationManager(FRAME_RATE);
    animationManager.addAnimationListener(new AnimationListener() {

    }); 
}
于 2012-09-21T19:28:57.197 回答