你的代码是在太乱了~~怎么Applet里面还有个main方法~~实在看不懂

解决方案 »

  1.   

    是啊,  在APPLET中怎么有main啊
      

  2.   

    是啊,  在APPLET中怎么有main啊 ^-^
      

  3.   

    “在APPLET中怎么有main啊” —— Applet 应用程序 双兼容,你们又不是没见过  : )
      

  4.   

    有没有必要用四个线程来代表四个灯,你既然是要四个灯依次点亮,那么他们之间有很明显的顺序关系,使用线程显得多余而且达不到效果,我觉得你上面的程序有一点有可能错误
                  currentRunning=ts[i].getName();    
        
         try{
    ts[i].sleep(30000);
         }catch(InterruptedException e){}
    你把当前灯的线程中止了,但是并没有终止其他的线程,这样其他的线程继续进行这样的运行,不可能达到依次点亮的要求
      

  5.   

    建议楼主先把代码整理一下:
    (1) 不要用MAIN的, 没这必要;
    (2) 建议不要全部都用i , 程序上太多i , 很乱的, 也很容易出错. 
    (3) 程序当中currentRunning=ts[i].getName(); 这次i 为0 , 它的作用是什么呢?? 如果你要它取ts[0]的字符串,为什么不在前面赋值呢?? 可否整理好以后再交上来呢? 要不然看不懂, 比重写时间更久, 难度更高哦.
      

  6.   

    to: qqbz(qqbz)开个玩笑而已啊,认真了  呵呵
      

  7.   

    To  joewong(丑男) :
      小弟刚学Java没多长时间,所以向各位请教。上面的代码是小弟一边看书上例子,一边照葫芦画瓢写的。
      本来十字路口有12个灯来控制各个方向的汽车的,但这12个灯显示情况恰好可以分为4种情况(这是小弟在实地考察得来的),所以我作了一下简化,只要能依次把四个灯显示出来,后面的问题就好说了。
      

  8.   

    因为小弟不知道怎么在Java里进行时间控制,所以只好用线程休眠来代替,如过各位有好一点的办法,还请相告。ts[i].notify();
    for(int x=0;x<ts.length;x++)
    {
         if(x!=i)
         {
              try{
         ts[x].wait();
    }catch(InterruptedException e){}
         }
    }
    这一部分代码的目的是在唤醒四个线程中的一个后,强行使其它三个线程“休眠”(直到被唤醒)
    这样使cpu只运行那个被唤醒的线程。(但不知能否达到这个目的)根据大家的提示,我去掉了main方法,从新改过的代码:
    import java.awt.*;
    import java.applet.*;public class TrafficControlling extends Applet
    {
         Thread ts[];
         int numberofThreads=4;
         String currentRunning;//用于记录当前线程的名字
         
         //创建四个线程分别用来控制四个灯
         public void init()
         {
    ts=new Thread[numberofThreads];
    for(int i=0;i<ts.length;i++)
    {
         ts[i]=new Thread(""+(i+1));
    }
         }
         
         public synchronized void run()
         {
             //先把四个线程启动
    for(int i=0;i<ts.length;i++)
    {
         ts[i].start();
    } int j=0;//j作线程数组的下标(避免和上面的i重复)
    while(true)//四个灯依次显示,无限循环
    {
         ts[j].notify();
         for(int x=0;x<ts.length;x++)
         {
     if(x!=j)
     {
           try{
         ts[x].wait();
           }catch(InterruptedException e){}
      }
                   }
        
          currentRunning=ts[j].getName();    
        
          try{
     ts[j].sleep(3000);
          }catch(InterruptedException e){}
        
          repaint();

          j=(++j)%numberofThreads;//下一个线程的下标
    }
         }

         public void paint(Graphics g)
         {
    g.setColor(Color.blue);

             //根据当前线程的名字,分别“显示”不同的灯
    if(currentRunning.equals("1"))
                  g.fillOval(0,100,100,100);
    else 
         if(currentRunning.equals("2"))
    g.fillOval(100,100,100,100);
         else
    if(currentRunning.equals("3"))
         g.fillOval(200,100,100,100);
    else
         g.fillOval(300,100,100,100);
         }
    }