2012-09-21 115 views
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); 
    } 
... 

这个类实现了接口:

公共类PuzzleView扩展SurfaceView实现Runnable,AnimationListener { ... private 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):主题ID = 1 :线程退出 未捕获的异常(group = 0x4001d800)09-21 19:15:51.453: E/AndroidRuntime(278):致命异常:main 09-21 19:15:51.453: E/AndroidRuntime(278)了java.lang.RuntimeException:无法启动 活性ComponentInfo {com.joshl.drop7/com.joshl.drop7.Game}: 显示java.lang.NullPointerException 09-21 19:15:51.453: E/AndroidRuntime(278) :在 android.app.ActivityThread.pervaLaunchActivity(ActivityThread.java:2663) 09-21 19:15:51.453:E/AndroidRuntime(278):at android.app.ActivityThread.handleLaunchActivity -21 19:15:51.453:E/AndroidRuntime(278):at android.app.ActivityThread.access $ 2300(ActivityThread.java:125)09-21 19:15:51.453:E/AndroidRuntime(278):at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2033) 09-21 19:15:51.453:E/AndroidRuntime(278):at android.os.Handler.dispatchMessage(Handler.java:99) 09-21 19:15:51.453:E/AndroidRuntime(278):at android.os.Looper.loop(Looper.java:123)09-21 19:15:51.453: E/AndroidRuntime(278):at android.app.ActivityThread.main(ActivityThread.java:4627)09-21 19:15:51.453:E/AndroidRuntime(278):at java.lang.reflect.Method.invokeNative( Native Method)09-21 19:15:51.453:E/AndroidRuntime(278):at java.lang.reflect.Method.invoke(Method.java:521)09-21 19:15:51.453: E/AndroidRuntime(278):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868) 09-21 19:15:51.453:E/AndroidRuntime(278):at com.android。 internal.os.ZygoteInit.main(ZygoteInit.java:626)09-21 19:15:51.453:E/AndroidRuntime(278):at 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):at 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):at android.app.Instrumentation。callActivityOnCreate(Instrumentation.java:1047) 09-21 19:15:51.453:E/AndroidRuntime(278):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 09-21 19:15:51.453 :E/AndroidRuntime(278):... 11更多09-21 19:15:53.333:I /进程(278):发送信号。 PID:278 SIG:9

+0

向我们展示您的堆栈跟踪 –

回答

2

看起来你从来没有初始化任何列出您的AnimationManager类。您应该添加这样的事情对于每个列出您的AnimationManager构造:

animationListeners = new ArrayList<AnimationListener>(); 
+0

哇,谢谢,我觉得很傻! – jmasterx

+0

没问题,乐意帮忙。 – MattDavis

0

尝试使用:

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

OR

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

    }); 
}