《Java》实验指导161718学生版.docx

上传人:b****6 文档编号:15455343 上传时间:2023-07-04 格式:DOCX 页数:36 大小:75.83KB
下载 相关 举报
《Java》实验指导161718学生版.docx_第1页
第1页 / 共36页
《Java》实验指导161718学生版.docx_第2页
第2页 / 共36页
《Java》实验指导161718学生版.docx_第3页
第3页 / 共36页
《Java》实验指导161718学生版.docx_第4页
第4页 / 共36页
《Java》实验指导161718学生版.docx_第5页
第5页 / 共36页
《Java》实验指导161718学生版.docx_第6页
第6页 / 共36页
《Java》实验指导161718学生版.docx_第7页
第7页 / 共36页
《Java》实验指导161718学生版.docx_第8页
第8页 / 共36页
《Java》实验指导161718学生版.docx_第9页
第9页 / 共36页
《Java》实验指导161718学生版.docx_第10页
第10页 / 共36页
《Java》实验指导161718学生版.docx_第11页
第11页 / 共36页
《Java》实验指导161718学生版.docx_第12页
第12页 / 共36页
《Java》实验指导161718学生版.docx_第13页
第13页 / 共36页
《Java》实验指导161718学生版.docx_第14页
第14页 / 共36页
《Java》实验指导161718学生版.docx_第15页
第15页 / 共36页
《Java》实验指导161718学生版.docx_第16页
第16页 / 共36页
《Java》实验指导161718学生版.docx_第17页
第17页 / 共36页
《Java》实验指导161718学生版.docx_第18页
第18页 / 共36页
《Java》实验指导161718学生版.docx_第19页
第19页 / 共36页
《Java》实验指导161718学生版.docx_第20页
第20页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

《Java》实验指导161718学生版.docx

《《Java》实验指导161718学生版.docx》由会员分享,可在线阅读,更多相关《《Java》实验指导161718学生版.docx(36页珍藏版)》请在冰点文库上搜索。

《Java》实验指导161718学生版.docx

《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;//客户端

privateMapcontainer=newHashMap();//HashMap

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>mySet=container.entrySet();

for(Iterator>it=mySet.iterator();it.hasNext();){//刷新列表

Map.Entryme=it.next();

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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 考试认证 > 交规考试

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2