100分大放送——能者取之 你的代码是在太乱了~~怎么Applet里面还有个main方法~~实在看不懂 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是啊, 在APPLET中怎么有main啊 是啊, 在APPLET中怎么有main啊 ^-^ “在APPLET中怎么有main啊” —— Applet 应用程序 双兼容,你们又不是没见过 : ) 有没有必要用四个线程来代表四个灯,你既然是要四个灯依次点亮,那么他们之间有很明显的顺序关系,使用线程显得多余而且达不到效果,我觉得你上面的程序有一点有可能错误 currentRunning=ts[i].getName(); try{ ts[i].sleep(30000); }catch(InterruptedException e){}你把当前灯的线程中止了,但是并没有终止其他的线程,这样其他的线程继续进行这样的运行,不可能达到依次点亮的要求 建议楼主先把代码整理一下:(1) 不要用MAIN的, 没这必要;(2) 建议不要全部都用i , 程序上太多i , 很乱的, 也很容易出错. (3) 程序当中currentRunning=ts[i].getName(); 这次i 为0 , 它的作用是什么呢?? 如果你要它取ts[0]的字符串,为什么不在前面赋值呢?? 可否整理好以后再交上来呢? 要不然看不懂, 比重写时间更久, 难度更高哦. to: qqbz(qqbz)开个玩笑而已啊,认真了 呵呵 To joewong(丑男) : 小弟刚学Java没多长时间,所以向各位请教。上面的代码是小弟一边看书上例子,一边照葫芦画瓢写的。 本来十字路口有12个灯来控制各个方向的汽车的,但这12个灯显示情况恰好可以分为4种情况(这是小弟在实地考察得来的),所以我作了一下简化,只要能依次把四个灯显示出来,后面的问题就好说了。 因为小弟不知道怎么在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); }} 【求助】二维数组和一维数组的转换,请问它们直接引用关系 servlet数据共享的问题。 输出汉字的uincode编码 Ping IP 求jxl的doc 再问线程问题,调用EXE 请分析下面代码! 学习上遇到麻烦了,请大家给个建议啊 初学Java :关于 switch case 问题 Please,help!help!!help!!! html页面中java Applet与javascript通信的问题,送100分 高手看过来![60分送给你]
currentRunning=ts[i].getName();
try{
ts[i].sleep(30000);
}catch(InterruptedException e){}
你把当前灯的线程中止了,但是并没有终止其他的线程,这样其他的线程继续进行这样的运行,不可能达到依次点亮的要求
(1) 不要用MAIN的, 没这必要;
(2) 建议不要全部都用i , 程序上太多i , 很乱的, 也很容易出错.
(3) 程序当中currentRunning=ts[i].getName(); 这次i 为0 , 它的作用是什么呢?? 如果你要它取ts[0]的字符串,为什么不在前面赋值呢?? 可否整理好以后再交上来呢? 要不然看不懂, 比重写时间更久, 难度更高哦.
小弟刚学Java没多长时间,所以向各位请教。上面的代码是小弟一边看书上例子,一边照葫芦画瓢写的。
本来十字路口有12个灯来控制各个方向的汽车的,但这12个灯显示情况恰好可以分为4种情况(这是小弟在实地考察得来的),所以我作了一下简化,只要能依次把四个灯显示出来,后面的问题就好说了。
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);
}
}