【问题标题】:Adding listener causes crash?添加监听器会导致崩溃?
【发布时间】:2012-09-21 19:26:02
【问题描述】:

我有一个监听器接口:

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 扩展 SurfaceView 实现 Runnable、AnimationListener { ... 私有 AnimationManager animationManager = null;

...

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

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

谢谢

09-21 19:15:51.433: D/AndroidRuntime(278): 关闭 VM 09-21 19:15:51.433: W/dalvikvm(278): threadid=1: 线程退出 未捕获的异常(组=0x4001d800)09-21 19:15:51.453: E/AndroidRuntime(278):致命例外:主要 09-21 19:15:51.453: E/AndroidRuntime(278): java.lang.RuntimeException: 无法启动 活动组件信息{com.joshl.drop7/com.joshl.drop7.Game}: java.lang.NullPointerException 09-21 19:15:51.453: E/AndroidRuntime(278):在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 android.app.ActivityThread.access$2300(ActivityThread.java:125) 09-21 19:15:51.453:E/AndroidRuntime(278):在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 android.os.Handler.dispatchMessage(Handler.java:99) 09-21 19:15:51.453:E/AndroidRuntime(278):在 android.os.Looper.loop(Looper.java:123) 09-21 19:15:51.453: E/AndroidRuntime(278):在 android.app.ActivityThread.main(ActivityThread.java:4627) 09-21 19:15:51.453:E/AndroidRuntime(278):在 java.lang.reflect.Method.invokeNative(Native Method) 09-21 19:15:51.453:E/AndroidRuntime(278):在 java.lang.reflect.Method.invoke(Method.java:521) 09-21 19:15:51.453: E/AndroidRuntime(278):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 09-21 19:15:51.453: E/AndroidRuntime(278): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 09-21 19:15:51.453:E/AndroidRuntime(278):在 dalvik.system.NativeStart.main(本机方法)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):在 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

【问题讨论】:

    标签: java android


    【解决方案1】:

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

    animationListeners = new ArrayList<AnimationListener>();
    

    【讨论】:

      【解决方案2】:

      尝试使用:

      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() {
      
          }); 
      }
      

      【讨论】:

        猜你喜欢
        • 2015-04-17
        • 2016-01-25
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 2021-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多