小弟现在还差复读!下面是小弟编的代码,大家帮看看有什么毛病?为什么一点复读能跳到起点,但无法让它到终点时返回起点继续走!(中间任取一段复读)
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();
}
}
}
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();
}
}
}
友情UP
Time time3=player.getMediaTime();
player.setMediaTime(time3);
tnow=time3;
if(tnow==tstop)
改改:不是很熟..
{
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();}
}
现在研究这个领域的人多吗?如果大家都不研究也行,小弟可以实话实说,那样也可以过关!就怕我不会别人会,那就糟糕了!
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),函数,让他自己设定停止的时间,应该有的吧,你自己差一下吧。
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();
}
}
}}小弟这个是分段复读,大家帮忙看看有什么问题?
查一下API