小弟现在还差复读!下面是小弟编的代码,大家帮看看有什么毛病?为什么一点复读能跳到起点,但无法让它到终点时返回起点继续走!(中间任取一段复读)
Time tstart,tstop,tnow;
  int ltimes=1;
  void jMenuLoopStart_actionPerformed(ActionEvent e) {
    Time time1=player.getMediaTime();
    player.setMediaTime(time1);
    tstart=time1;
    //JOptionPane.showMessageDialog(null,time1);
  }  void jMenuLoopStop_actionPerformed(ActionEvent e) {
    Time time2=player.getMediaTime();
    player.setMediaTime(time2);
    tstop=time2;
   //JOptionPane.showMessageDialog(null,time2);
  }
void jMenuLoopSetLoopTimes_actionPerformed(ActionEvent e) {
    String times=JOptionPane.showInputDialog(null,"请输入复读次数:");
    int a=Integer.parseInt(times);
          ltimes=a;
  }
void jMenuLoopBegin_actionPerformed(ActionEvent e) {
    for(int i=0;i<=ltimes;i++)
    {
       player.setMediaTime(tstart);
       player.start();
       player.setMediaTime(tstop);
       Time time3=player.getMediaTime();
       player.setMediaTime(time3);
       tnow=time3;
       if(tnow==tstop)
       {
         player.setMediaTime(tstart);
         player.start();
       }
    }
  }

解决方案 »

  1.   

    没有接触这种CLASS帮你顶
    友情UP
      

  2.   

    player.setMediaTime(tstop);
    Time time3=player.getMediaTime();
    player.setMediaTime(time3);
    tnow=time3;
    if(tnow==tstop)
    改改:不是很熟..
      

  3.   

    for(int i=0;i<=ltimes;i++)
        {
           player.setMediaTime(tstart);
           player.start();
           player.setMediaTime(tstop);
           Time time3=player.getMediaTime();
           player.setMediaTime(time3);
           tnow=time3;
           if(tnow==tstop)
           {
             player.setMediaTime(tstart);
             player.start();
           }
        }
    改成:
    int i =0;
    player.setMediaTime(tstart);
           player.start();
           player.setMediaTime(tstop);
           Time time3=player.getMediaTime();
           player.setMediaTime(time3);
           tnow=time3;
           if(tnow==tstop)
           {
             player.setMediaTime(tstart);
             player.start();
            i++;
            if(i==ltimes){player.stop();}
               
           }
      

  4.   

    大家帮帮忙啊,小弟就快交了,还有3,5天就交了。各位大侠,我问一下,JMF技术如何能了解里面的类库函数或方法是怎么写的?如果不了解的话,想实现什么功能根本很难啊?
    现在研究这个领域的人多吗?如果大家都不研究也行,小弟可以实话实说,那样也可以过关!就怕我不会别人会,那就糟糕了!
      

  5.   

    我不明白你的player什么接口.不过你的循环里
    Time time3=player.getMediaTime();
    player.setMediaTime(time3);
    tnow=time3;
    if(tnow==tstop)
       {}
    这样取时间不对,原因是,你只在一次播放中取了一次目前的时刻,怎么判断是不是你要结束的时间呢?
    最笨的方法用不停校对是否到结束时间.
    while(True){
      Time time3=player.getMediaTime();
      player.setMediaTime(time3);
      tnow=time3;
      if((tnow)/1000==(tstop)/1000)
         {
             player.setMediaTime(tstart);
             player.start();
             break;
              }
    这里的时间应该是毫秒吧,要容许一秒左右的误差,所以要除以1000,取整,不知语法是否错误,另外,在这个循环内还应 Thread.sleep(300);可能对该善性能有好处,你可以测试一下更好的方法是 ,你的player应该有一个setStoptime(time),函数,让他自己设定停止的时间,应该有的吧,你自己差一下吧。
      

  6.   

    好!先谢谢了!对了,你知道有没有可以判断到达中间一点的方法?就好象判断到达媒体尾的那个EndOfMediaEvent!
      

  7.   

    那个死循环不行啊!而且我试过setStoptime(time),他停以后就不再继续工作了,即使我调用setMediatime(tstart);player.start();或者restore也不成,怎么才能让他在setStoptime(time)后继续我想要的工作啊!
      

  8.   

    你可以在setStoptime(time)后,在stopEvent中,重新回到起始位置,并dsf播放
      

  9.   

    你的player 如果不是多线程就会有问题。
      

  10.   

    Time tstart,tstop,tnow;
      int n=1,m=1;
      int looptimes=1;
      int delay1;
      long str,stp,str1,stp1,stn,stn1;
       Vector strv=new Vector();
       Vector stpv=new Vector();
      JMenuItem jMenuHelp_about = new JMenuItem();
      void jMenuLoopStart_actionPerformed(ActionEvent e) {
        Time time1=player.getMediaTime();
        player.setMediaTime(time1);
        tstart=time1;
        str=player.getMediaNanoseconds();
        str1=str/1000000;
       strv.addElement(new Long(str1));    //JOptionPane.showMessageDialog(null,time1);
      }  void jMenuLoopStop_actionPerformed(ActionEvent e) {
        Time time2=player.getMediaTime();
        player.setMediaTime(time2);
        tstop=time2;
        stp=player.getMediaNanoseconds();
        stp1=stp/1000000;
        stpv.addElement(new Long(stp1));   //JOptionPane.showMessageDialog(null,time2);
      }
    void jMenuLoopSetLoopTimes_actionPerformed(ActionEvent e) {
        String times=JOptionPane.showInputDialog(null,"请输入复读次数:");
        int a=Integer.parseInt(times);
              looptimes=a;
      }  Boy boy=new Boy();
      void jMenuLoopSetLoopTimes_itemStateChanged(ItemEvent e) {}
      javax.media.bean.playerbean.MediaPlayer mp=new javax.media.bean.playerbean.MediaPlayer();
      JMenu jMenuList = new JMenu();
      JMenuItem jMenuList_play = new JMenuItem();
      void jMenuLoopBegin_actionPerformed(ActionEvent e) {
          player.setMediaTime(tstart);
          player.start();
          Enumeration e1=strv.elements();
          Enumeration e2=stpv.elements();
          while(true)
          {
            while (e1.hasMoreElements() && e2.hasMoreElements()) {
              Long longobj1 = (Long) e1.nextElement();
              Long longobj2 = (Long) e2.nextElement();
              //int delay1 = (int) (stp1 - str1);
              long lo1 = longobj1.longValue();
              long lo2 = longobj2.longValue();
              delay1 = (int) (lo2 - lo1);
              m++;
            }
            if (strv.isEmpty() || stpv.isEmpty())break;
          }
            timer = new javax.swing.Timer(delay1, boy);
     timer.start();
    class Boy implements ActionListener
     {
       public void actionPerformed(ActionEvent e){
           player.setMediaTime(tstart);
            n++;
            if(n>=looptimes)
            {
                timer.stop();
            }
               }
     }}小弟这个是分段复读,大家帮忙看看有什么问题?
      

  11.   

    加一个监护线程,好像叫TimeClick还是什么的,就是每多少秒触发一个事件
    查一下API