1

我收到 NullPointerException 到有关计时器的活动的最后一行之一。活动中发生的是 5 个 .ogg 文件一个接一个地播放。错误指向最后一个 TimerTask。我贴出整个代码,请不要害怕,代码中有很多重复。我不知道用户在错误之前做了什么,它没有出现在我的手机上。

java.lang.NullPointerException
at com.b2creativedesigns.eyetest.AmslerGrid1$5.run(AmslerGrid1.java:343)
at java.util.Timer$TimerImpl.run(Timer.java:284)

部分代码:

public class AmslerGrid1 extends Activity {

    Button btnFinish;
    Button btnMute;
    ImageView imgAG;
    TextView tvResult;
    MediaPlayer help1, help2, help3, help4, help5;
    int paused=0;
    long del=250;
    int intentcounter=0;
    int p=10;
    int length;
    private Timer timer;
    boolean out;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.amslergrid1);
        out = false;
        imgAG = (ImageView)findViewById(R.id.imgAG);
        tvResult = (TextView)findViewById(R.id.tvAGResult);
        btnFinish = (Button)findViewById(R.id.btnAGResult);
        btnMute = (Button)findViewById(R.id.btnAGmute);

        help1 = MediaPlayer.create(AmslerGrid1.this, R.raw.ag1);
        help2 = MediaPlayer.create(AmslerGrid1.this, R.raw.ag2);
        help3 = MediaPlayer.create(AmslerGrid1.this, R.raw.ag3);
        help4 = MediaPlayer.create(AmslerGrid1.this, R.raw.ag4);
        help5 = MediaPlayer.create(AmslerGrid1.this, R.raw.ag5);

        timer = new Timer("AmslerGridTimer");
        timer.schedule(TimerHelp1, 2000);

        help1.setOnCompletionListener(new OnCompletionListener() {

            @Override
            public void onCompletion(final MediaPlayer cim) {
                if (paused == 0)
                {
                }
                help1.release();help1=null;
                timer = new Timer("AmslerGridTimer");
                timer.schedule(TimerHelp2, 1500);
            }
        });

        help2.setOnCompletionListener(new OnCompletionListener() {...
        help3.setOnCompletionListener(new OnCompletionListener() {...
        help4.setOnCompletionListener(new OnCompletionListener() {...
        help5.setOnCompletionListener(new OnCompletionListener() {...

            @Override
            public void onCompletion(final MediaPlayer cim) {
                if (paused == 0)
                {
                }
                help5.release();help5=null;
            }
        });

    }






    @Override
    protected void onPause() {
        super.onPause();
        if (help1 != null)
        {
            help1.pause(); 
            length=help1.getCurrentPosition();
        }
        ...
        else if (help5 != null)
        {
            help5.pause(); 
            length=help5.getCurrentPosition();
        }

        p=0;
    }



    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        if (help1 != null)
        {
            if (p==0){
                help1.seekTo(length); help1.start(); 
                help1.setOnCompletionListener(new OnCompletionListener() {

                    @Override
                    public void onCompletion(final MediaPlayer cim) {
                        help1.release();help1=null;
                    }
                });
                paused=0;p=1;
            }
        }
           ...
        else if (help5 != null)
        {
            if (p==0){
                help5.seekTo(length); help5.start(); 
                help5.setOnCompletionListener(new OnCompletionListener() {

                    @Override
                    public void onCompletion(final MediaPlayer cim) {
                        help5.release();help5=null;
                    }
                });
                paused=0;p=1;
            }
        }
    }

    @Override
      public void onDestroy() {
        super.onDestroy();
        timer.cancel();
        timer = null;
      }

    public boolean onKeyDown(int keyCode, KeyEvent event) 
    {
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) 
        {
            out = true;
            if (help1 != null)
            {
                help1.stop(); 
            }
            else if (help2 != null)
            {
                help2.stop(); 
            }
            else if (help3 != null)
            {
                help3.stop(); 
            }
            else if (help4 != null)
            {
                help4.stop(); 
            }
            else if (help5 != null)
            {
                help5.stop(); 
            }
            Intent intentstart = new Intent(AmslerGrid1.this, MainActivity.class);
            intentstart.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intentstart);

        }
        return super.onKeyDown(keyCode, event);
    }

    private TimerTask TimerHelp1 = new TimerTask() {
        @Override
        public void run() {
            if (!out) help1.start();p=1;
        }
      };
    private TimerTask TimerHelp2 = new TimerTask() {
        @Override
        public void run() {
            if (!out) help2.start();p=1;
        }
      };
    private TimerTask TimerHelp3 = new TimerTask() {
        @Override
        public void run() {
            if (!out) help3.start();p=1;
        }
      };
    private TimerTask TimerHelp4 = new TimerTask() {
        @Override
        public void run() {
            if (!out) help4.start();p=1;
        }
      };
    private TimerTask TimerHelp5 = new TimerTask() {
        @Override
        public void run() {
            if (!out) help5.start();p=1; //error line. Maybe out is null?
        } 
      };
}
4

0 回答 0