《Java》实验指导161718学生版.docx
- 文档编号:15455343
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:36
- 大小:75.83KB
《Java》实验指导161718学生版.docx
《《Java》实验指导161718学生版.docx》由会员分享,可在线阅读,更多相关《《Java》实验指导161718学生版.docx(36页珍藏版)》请在冰点文库上搜索。
《Java》实验指导161718学生版
(/文理学院)
《面向对象程序设计》实验指导及报告书
(2014.9-2015.1)
2014/2015学年第1学期
实验课程:
《面向对象程序设计》
系别:
教育信息与技术学院/信息工程系
专业:
信息工程/电子信息工程
班级:
1202/1203/文信1201班
姓名:
__________
学号:
____________
指导教师:
许新华
教育信息与技术学院
2014.9
实验项目十六多线程编程
一、实验目的及要求
1、通过继承Thread的多线程编程
2、通过实现Runnable的多线程编程
3、GUI多线程编程
二、实验内容和要求
1、通过继承Thread的多线程编程
//p240,例13-1
publicclassThreadOneextendsThread{//继承类
privateStringname;//声明私有成员变量
publicThreadOne(Stringname){
this.name=name;
}
publicvoidrun(){//重写方法
.
.
.
//暂停线程0.5秒
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
}
publicstaticvoidmain(String[]args){
ThreadOnet1=newThreadOne("Tom线程");//创建线程
.
.
.
;//启动线程
t2.start();
}
}
●运行结果
每一次运行的结果都不相同,为什么?
●算法分析
2、通过实现Runnable的多线程编程
//p240,例13-2
publicclassThreadOneimplementsRunnable{//实现接口
privateStringname;//声明私有成员变量
publicThreadOne(Stringname){
this.name=name;
}
publicvoidrun(){//重写方法
for(inti=0;i<10;i++){
System.out.println("Mynameis:
"+name+i);
try{
Thread.sleep(500);//暂停线程0.5秒
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
}
publicstaticvoidmain(String[]args){
ThreadOner1=newThreadOne("Tom线程");//创建run()方法所在类的对象
.
.
.
t2.start();
}
}
●运行结果
每一次运行的结果都不相同,为什么?
●算法分析
3、GUI多线程编程
//赛马,多线程应用,用3个文件完成
//文件名HuaMa.java
importjava.awt.*;
importjava.util.Random;
importjava.awt.event.*;
importjavax.swing.*;
classHuaMaextendsJPanel{
Imageimg=Toolkit.getDefaultToolkit().getImage("horse.gif");//装载马图像
intx1=2,x2=2,x3=2,x4=2;
publicvoidpaintComponent(Graphicsg){
super.paintComponent(g);
g.setColor(Color.red);
this.setBackground(Color.white);
g.drawImage(img,x1,0,this);//显示一号马所在位置
g.drawString("1",2,40);
g.drawImage(img,x2,80,this);//显示二号马所在位置
g.drawString("2",2,120);
g.drawImage(img,x3,158,this);//显示三号马所在位置
g.drawString("3",2,200);
g.drawImage(img,x4,240,this);//显示四号马所在位置
g.drawString("4",2,280);
g.fillRect(635,9,3,300);
}
}
-------------------------------------------------------------
//文件名SaiDao.java,通过继承Thread类创建线程SaiDao
//内容在附件的saima文件夹
//文件名Mamain.java,设置赛马主界面,调用HuaMa和SaiDao
importjava.awt.*;
importjava.util.Random;
importjava.awt.event.*;
importjavax.swing.*;
publicclassMamainextendsJFrameimplementsActionListener,FocusListener{
HuaMahm=newHuaMa();
SaiDao[]ht=newSaiDao[4];//表示四个赛道
//以下为添加组件
JPaneljp=newJPanel();
JButtonjb=newJButton("开始");
JRadioButtonjrb1=newJRadioButton("一号马");
JRadioButtonjrb2=newJRadioButton("二号马");
JRadioButtonjrb3=newJRadioButton("三号马");
JRadioButtonjrb4=newJRadioButton("四号马");
ButtonGroupbg=newButtonGroup();
JTextAreajta=newJTextArea(5,10);
JScrollPanejsp=newJScrollPane(jta);
intmoney=20000;
JLabeljlb2=newJLabel("金额:
"+String.valueOf(money));
JTextFieldjtf=newJTextField("请输入投注金额");
JPaneljp1=newJPanel();
publicMamain(){
super("多线程赛马");
this.setSize(660,460);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//马号按纽
jrb1.setOpaque(false);
jrb2.setOpaque(false);
jrb3.setOpaque(false);
jrb4.setOpaque(false);
jp1.setBorder(BorderFactory.createTitledBorder("投注区"));
bg.add(jrb1);
bg.add(jrb2);
bg.add(jrb3);
bg.add(jrb4);
jp1.add(jrb1);
jp1.add(jrb2);
jp1.add(jrb3);
jp1.add(jrb4);
jp1.setOpaque(false);
jp.add(jp1,BorderLayout.WEST);
jp.add(jb);
jp.add(jsp);
jp.add(jlb2);
jp.add(jtf);
jp.setBackground(Color.PINK);
hm.setBorder(BorderFactory.createTitledBorder("赛马区"));
this.add(hm);
this.add(jp,BorderLayout.SOUTH);
this.setVisible(true);
jb.addActionListener(this);
jtf.addFocusListener(this);
for(inti=0;i ht[i]=newSaiDao(hm,i+1,this); } } publicstaticvoidmain(String[]args){ newMamain(); } publicvoidactionPerformed(ActionEvente){//开始按钮事件服务,首轮赛马 . . . } int[]getRND(){ . . . } publicvoidfocusGained(FocusEvente){ if(e.getSource().equals(jtf)) { jtf.setText(""); } } publicvoidfocusLost(FocusEvente){ } } ●运行结果 ●算法分析 三、实验小结 四、教师评语及成绩 实验项目十七网络编程 一、实验目的及要求 1、了解TCP通信类及应用 2、了解UDP类及应用 3、打造网络聊天室 二、实验内容和要求 1、了解TCP通信类及应用 //p251,例14-1 importjava.awt.*; importjava.applet.*; importjava.util.*; import.*; publicclassFwangluoextendsApplet{ InetAddressHostaddr=null; publicvoidstart(){ try{ Hostaddr=______________________; }catch(UnknownHostExceptione){ System.out.println(_________________); } repaint(); } publicvoidpaint(Graphicsg){ g.drawString("Hostname/IP: "+Hostaddr.toString(),10,30); } } ●运行结果 ●算法分析 2、了解UDP类及应用(见网络聊天室) ●运行结果 ●算法分析 3、打造网络聊天室 //聊天室,网络编程,用Server.java+Client.java+Login.java3个文件完成 //服务器端文件名Server.java (这个文件放到老师的主机上,同学们可以不管) import.*; importjava.io.*; importjava.util.*; importjava.awt.event.*; importjava.awt.*; importjavax.swing.*; classServerextendsJFrame{ privateTextAreamsgA=newTextArea();//服务器用来输入的文本域 privateTextAreaarea=newTextArea();//服务器显示消息的文本域 privatejava.awt.Listlist=newjava.awt.List();//在线客户列表 privateServerSocketserver;//服务器 privateSocketclient;//客户端 privateMap voidinit(){ //设置几个面板 Panelp1=newPanel(); Panelp2=newPanel(); Panelp3=newPanel(); Panelp4=newPanel(); Panelp5=newPanel(); Panelp6=newPanel(); Panelp7=newPanel(); //设置两个主要的文本框 BorderLayoutborder1=newBorderLayout(); p1.setLayout(border1); p1.add(BorderLayout.CENTER,area); BorderLayoutborder2=newBorderLayout(); p3.setLayout(border2); p3.add(BorderLayout.NORTH,p2); p3.add(BorderLayout.CENTER,msgA); BorderLayoutborder3=newBorderLayout(); p4.setLayout(border3); p4.add(BorderLayout.CENTER,p1); p4.add(BorderLayout.SOUTH,p3); JButtonstartButton=newJButton("启动服务"); JButtonsendButton=newJButton("发送"); JButtonflushButton=newJButton("刷新列表"); FlowLayoutfl=newFlowLayout(FlowLayout.LEFT); p5.setLayout(fl); p5.add(startButton); p5.add(sendButton); p5.add(flushButton); BorderLayoutborder4=newBorderLayout(); p6.setLayout(border4); p6.add(BorderLayout.CENTER,p4); p6.add(BorderLayout.SOUTH,p5); p7.setLayout(newBorderLayout()); Labellb3=newLabel("在线用户"); p7.add(lb3,BorderLayout.NORTH); p7.add(list,BorderLayout.CENTER); area.setEditable(false); BorderLayoutborder=newBorderLayout(); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLayout(border); this.add(BorderLayout.CENTER,p6); this.add(BorderLayout.EAST,p7); this.setTitle("聊天服务器"); this.setBounds(100,100,600,550); this.setVisible(true); //"启动服务"按钮监听器 startButton.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ Threadt=newStart(); t.start(); } }); //发送按钮监听器 sendButton.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ Stringmsg=msgA.getText(); if(msg! =null&&msg! =""){//如果消息不为空 Calendarca=newGregorianCalendar(); inthh=ca.get(Calendar.HOUR_OF_DAY); intmm=ca.get(Calendar.MINUTE); intss=ca.get(Calendar.SECOND); Stringtime=newString(hh+": "+mm+": "+ss+""); broadcast(time+"[系统消息]: "+msg);//那么广播这条系统消息 area.append(time+"[系统消息]: "+msg+"\n"); msgA.setText(""); } } }); //刷新按钮监听器 flushButton.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ if(list! =null){ list.removeAll();//清空在线用户列表,以便刷新 } Set for(Iterator Map.Entry StringaClientName=me.getKey(); SocketaClient=me.getValue(); StringaClientAddress=aClient.getInetAddress().getHostAddress(); list.add(aClientName+"----"+aClientAddress); } } }); msgA.addKeyListener(newKeyAdapter(){//键盘监听器---按下Enter发送信息 publicvoidkeyPressed(KeyEvente){ intvalue=e.getKeyCode(); if(value==KeyEvent.VK_ENTER){ Stringmsg=msgA.getText(); Calendarca=newGregorianCalendar(); inthh=ca.get(Calendar.HOUR_OF_DAY); intmm=ca.get(Calendar.MINUTE); intss=ca.get(Calendar.SECOND); Stringtime=newString(hh+": "+mm+": "+ss+""); broadcast(time+"[系统消息]: "+msg);//那么广播这条系统消息 area.append(time+"[系统消息]: "+msg+"\n"); msgA.setText(""); } } }); } classStartextendsThread//启动服务器的线程 { publicvoidrun(){ try{ if(server! =null&&! server.isClosed()){ area.append("警告! 服务器已在启动中! \n"); } else{ server=newServerSocket(2009);//启动服务器 area.append((newDate()).toString()+'\n'+"恭喜! "+"服务器启动成功! "+"\n\n"); } while(true){ client=server.accept(); ThreadsgS=newSgService(client);//为每位登录的客户创建一个线程 sgS.start();//启动客户线程 } } catch(Exceptione){ e.printStackTrace(); } } } //处理单个客户的线程 classSgServiceextendsThread { privateSocketclient=null;//客户套接字 privateBufferedReaderbr=null;//输入流 privatePrintStreamps=null; privateintcounter=0;//记录是第几次接受用户的信息 privateStringname=null; SgService(Socketclient){//构造方法 this.client=client; } publicvoidrun(){ try{ br=newBufferedReader(newInputStreamReader(client.getInputStream())); ps=newPrintStream(client.getOutputStream()); Stringmsg=null; while((msg=br.readLine())! =null){//无限循环,和客户进行无限次交互 if(counter==0){ name=msg; container.put(name,client); list.add(name+"----"+client.getInetAddress().getHostAddress()); Calendarca=newGregorianCalendar(); inthh=ca.get(Calendar.HOUR_OF_DAY); intmm=ca.get(Calendar.MINUTE); intss=ca.get(Calendar.SECOND); Stringtime=hh+": "+mm+": "+ss+""; broad
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 实验 指导 161718 学生