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 (ネイティブ メソッド) 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 more 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): 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 more 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): 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 more 09-21 19:15:53.333: I/Process(278): シグナルを送信しています。PID: 278 SIG: 9 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): 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 more 09-21 19:15:53.333: I/Process(278): シグナルを送信しています。PID: 278 SIG: 9 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): 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 more 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): 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 more 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): 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 more 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): 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): 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 に答える