虽然调试通过,可是总觉得有点问题。
代码:
package test;import java.util.Timer;
import java.util.TimerTask;public class LightTest
{
    private final Timer timer = new Timer();
    private final int second;
    private final int color;    public LightTest( int second, int color )
    {
this.second = second;
this.color = color;
    }
    
    public void DisplayLight( int color )
    {
switch( color )
{
         case 1:
         {
     System.out.println( "红灯亮" );
     break;
         }
         case 2:
         {
     System.out.println( "黄灯亮" );
     break;
         }
         case 3:
         {
     System.out.println( "绿灯亮" );
     break;
         }
         default:
         {
     System.out.println( "输入参数错误!" );
     break;
         }
}
    }
    
    public void start()
    {
DisplayLight( color );
timer.schedule( new TimerTask()
{
    public void run()
    {
timer.cancel();
    }
}, second*1000 );

    }
    
    public static void main(String[] args)
    {
while ( true )
{
         LightTest green = new LightTest( 14, 3 );
         green.start();
         LightTest yellow = new LightTest( 6, 2 );
         yellow.start();
         LightTest red = new LightTest( 20, 1 );
         red.start();
}
    }
}运行时发现在控制台显示的时间并不是我定义的时间间隔。而是时快时慢。困惑~~
请各位高手指点!谢谢!

解决方案 »

  1.   

    在timer.schedule( new TimerTask()
    {
    public void run()
    {
    timer.cancel();
    }
    }, second*1000 );}
    中用的是timer.shedule(new TimerTask(),senconds*1000);改为timer.shedule(new TimerTask(),0,seconds*1000);就对了.在括号里的后俩参数分别代表的什么时候开始和延迟多久.
      

  2.   

    可能是因为你地等的转换是叫给一条子线程来完成的,而你main函数的主线程是不断循环的控制灯的跳转.所以就会出现你那种情况,我改了一下:package Test;import java.util.Date;
    import java.util.Timer;
    import java.util.TimerTask;public class LightTest{
        private final Timer timer = new Timer();
        private final int second;
        private final int color;    public LightTest( int second, int color )
        {
    this.second = second;
    this.color = color;
        }
        
        public void DisplayLight( int color )
        {
    switch( color )
    {
             case 1:
             {
         System.out.println( "红灯亮" );
         break;
             }
             case 2:
             {
         System.out.println( "黄灯亮" );
         break;
             }
             case 3:
             {
         System.out.println( "绿灯亮" );
         break;
             }
             default:
             {
         System.out.println( "输入参数错误!" );
         break;
             }
    }
        }
        
        public void start()
        {
    DisplayLight( color );
    timer.schedule( new TimerTask()
    {
        public void run()
        {
    timer.cancel();
        }
    }, second*1000 );

        }
        
        public static void main(String[] args)
        {
    while ( true )
    {
             LightTest green = new LightTest( 14, 3 );
             green.start();
             try {
    Thread.sleep(green.second*1000);
    } catch (InterruptedException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    }
            
             LightTest yellow = new LightTest( 6, 2 );
             yellow.start();
             try {
              System.out.println(new Date());
    Thread.sleep(yellow.second*1000);
    System.out.println(new Date());
             } catch (InterruptedException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    }
             LightTest red = new LightTest( 20, 1 );
             red.start();
             try {
    Thread.sleep(red.second*1000);
    } catch (InterruptedException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    }
    }
        }
    }
      

  3.   

    修正一下import java.util.Timer;
    import java.util.TimerTask;public class LightTest{
    static long start_time;
    private final Timer timer = new Timer(); private final int second; private final int color; public LightTest(int second, int color) {
    this.second = second;
    this.color = color;
    } public void DisplayLight(int color) {
    switch (color) {
    case 1: {
    System.out.println("红灯亮");
    break;
    }
    case 2: {
    System.out.println("黄灯亮");
    break;
    }
    case 3: {
    System.out.println("绿灯亮");
    break;
    }
    default: {
    System.out.println("输入参数错误!");
    break;
    }
    }
    } public void start() {
    //DisplayLight(color);
    timer.schedule(new TimerTask(){
    public void run(){
    DisplayLight(color);
    System.out.println((System.currentTimeMillis() - start_time) + "毫秒\r\n");
    }
    }, 0, second * 1000);
    } public static void main(String[] args) {
    start_time = System.currentTimeMillis();
    //while (true) {
    LightTest green = new LightTest(14, 3);
    green.start();
    LightTest yellow = new LightTest(6, 2);
    yellow.start();
    LightTest red = new LightTest(20, 1);
    red.start(); //}*/
    /*Timer tr = new Timer();
    tr.schedule(new TimerTask() {
    public void run() {
    System.out.println(100);
    }
    }, 0, 1000);*/
    }
    }