我是想实现图片自动翻页的过程,大致的生命周期为:周期开始 -> 点击自动播放 -> 实现翻页  -> 点击暂停 -> 翻页停止,显示当前的页面  -> 点击继续播放  -> 从当前页继续播放 -> 点击暂停 - > 翻页停止 ->  //如此循环直至到达最后一张图片  ->  周期结束.run()方法里面只有且仅有一个自动播放的方法:autoPlay();public void autoPlay(){
      while(isPlay == true){
         //进行翻页,输出提示当前图片页号
      }//当外面事件为点击暂停翻页时,isPlay == false,所以我将thread   suspend(),thr为实现翻页的线程,也就是在此方法里thr 就是 Thread.currentThread();
      if(isPlay == false){
          thr.suspend();
      }
} 至此,实现“周期开始 -> 点击自动播放 -> 实现翻页  -> 点击暂停 -> 翻页停止,显示当前的页面”的过程.问题就在下面要继续进行翻页时:我用的方法是:点击继续播放后,调用thr.resume();发现线程好像没有运行,看到的图片和图片页号是不变的,为什么???如何实现继续播放呢???谢谢...也不知道大家明白了我的意思了没有,难为大家了....

解决方案 »

  1.   

    注意,start()后,thr是从autoPlay处开始从头运行的,所以第一次可以实现自动 翻页,当第一次suspend() 后,这时thr里的autoPlay已经全部运行完了.也就是说虽然thr重新调用了run(),但是却不从autoPlay()处从头开始 .对于这个情形的判断,你可以改下面的代码来证明:public void autoPlay(){
          while(isPlay == true){
             //进行翻页,输出提示当前图片页号
          }//当外面事件为点击暂停翻页时,isPlay == false,所以我将thread   suspend(),thr为实现翻页的线程,也就是在此方法里thr 就是 Thread.currentThread();
          if(isPlay == false){
              Sysout("第一次suspend()前最多执行到调用下面          thr.suspend();的语句   ");
              thr.suspend();
          }
          Sysout("suspend()后第一次resume()后终于执行到此处,而且仅执行此处");
    } 可以看到当你点击暂停后,会有输出“第一次suspend()前最多执行到调用下面          thr.suspend();的语句"的输出,
    而接下来的这句话要直至你点击继续后才会输出:“suspend()后第一次resume()后终于执行到此处,而且仅执行此处”
    所以,你如果想实现继续翻页的话,用迭代就可以了.实现代码如下:
    public void autoPlay(){
          while(isPlay == true){
             //进行翻页,输出提示当前图片页号
          }//当外面事件为点击暂停翻页时,isPlay == false,所以我将thread   suspend(),thr为实现翻页的线程,也就是在此方法里thr 就是 Thread.currentThread();
          if(isPlay == false){
              Sysout("第一次suspend()前最多执行到调用下面          thr.suspend();的语句   ");
              thr.suspend();
          }
          Sysout("suspend()后第一次resume()后终于执行到此处,而且仅执行此处");
          autoPlay();//此处迭代.