- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JAVA实验报告
班级: 学号:2402100210
姓名: 黄小君
题目
红绿灯控制道路车辆
2.设计思路
交通红绿灯是交通的控制中心,控制着道路上的所有车辆的行进与停止,各各车辆为各自的线程,红绿灯也是一个线程,同时,红绿灯线程用控制着车子线程的run、suspend、resume。
3.重点代码解释
(1)此处代码为添加背景音乐及建立一个JPanel容器
File musicFile;///////////////////////////
URI uri;
URL url;
public void init()
{
musicFile=new File(街道上汽车鸣笛的声音.wav);
uri=musicFile.toURI();
try{url=uri.toURL();}
catch(Exception e){}
AudioClip clip=JApplet.newAudioClip(url);
clip.loop();////////////////////////以上为添加音乐
Container cp=getContentPane();
CBox pa=new CBox();
pa.setPreferredSize(new Dimension(1000, 1000));
pa.setBackground(Color.red);
cp.add(pa,BorderLayout.CENTER);///////建立一个JPanel容器
}
(2)此段代码为红绿灯线程,控制红绿灯的变化,同时还会在变化灯时唤醒其他的线程,使正在sleep的线程resume。
while(th5==Thread.currentThread())////////////////////线程5,此线程控制红绿灯
{
if(L1.RedLight)
{
th3.resume();//当红灯亮时,东西向车子停,南北向车子动
try{
th5.sleep(5000);
L1.RedLight=false;
L1.YellowLight=true;
L1.GreenLight=false;
repaint();
}
catch(Exception e) {}
}
if(L1.YellowLight)
{
th3.resume();//当黄灯亮时,东西向车子停,南北向车子动
try{
th5.sleep(5000);
L1.YellowLight=false;
L1.GreenLight=true;
L1.RedLight=false;
repaint();
}
catch(Exception e) {}
}
if(L1.GreenLight)
{
th1.resume();//当绿灯亮时,东西向车子启动,南北向车子停止
th2.resume();
th4.resume();
try{
th5.sleep(10000);
L1.YellowLight=false;
L1.RedLight=true;
L1.GreenLight=false;
repaint();
}
catch(Exception e) {}
}
}
(3)我们在屏幕上自绘图形或者是添加图片都是要通过所在画布的重绘来实现的,因此闪烁的出现必然与重绘机制有着一些关联。在awt中对于窗体画布的重绘其条用顺序是repaint() —update()—paint()。update中有一个清屏的作用,即g.clearRect(0, 0, width, height);然后再在下面调用paint(g),函数进行重绘。
public void update(Graphics g) //双缓冲原
文档评论(0)