JAVA语言程序设计教程 第9章
9Java程序设计教程 第九章 网络编程

Java程序设计教程
Java程序设计教程
第 11 页
UDP协议和TCP协议简单对比
第九章
网络编程
TCP协议可靠,传输大小无限,但是需要连接建立时间,差 错控制开销大。UDP协议不可靠,差错控制开销较小,传输 大小限制在64KB以下,不需要建立连接,通信效率很高。
Java程序设计教程
Java
语 言 程 序 设 计
Java程序设计教程
第2 页
第九章 网络编程
Java程序设计教程
第3 页
学习目标
任务1:网络通信协议 任务2: TCP/IP协议 任务3: UDP协议
第九章
网络编程
(1) Java网络通信 (2) U程
Java程序设计教程
第4 页
网络通信协议
第九章
网络通信协议通常由三部分组成:
(1)一是语义部分,用于决定双方对话的类型; (2)二是语法部分,用于决定双方对话的格式; (3)三是变换规则,用于决定通信双方的应答关系。
网络编程
Java程序设计教程
Java程序设计教程
第5 页
TCP/IP协议
第九章
网络编程
TCP/IP协议是一种可靠的网络协议,它在通信的两端各建立 一个Socket,从而在通信的两端之间形成网络虚拟链路。一
集信息包,并将其按适当的次序放好传送,接收端收到后再 将其正确地还原。
Java程序设计教程
Java程序设计教程
第8 页
TCP/IP协议
第九章
网络编程
TCP协议保证了信息包在传送过程中准确无误。TCP协议使用 重发机制,当一个通信实体发送一个消息给另一个通信实体 后,需要收到另一个通信实体的确认信息,若没有收到另一 个通信实体的确认信息,则会再次重发刚才发送的信息。
Java程序设计教程 第九章

9.1.2ava中,每个线程从创建到消亡为一个生 Java中,每个线程从创建到消亡为一个生 存周期,它将经历四个状态: (1)新建状态(New Thread Status )新建状态(New (2)可执行状态(Runnable) )可执行状态(Runnable) (3)阻塞状态(Blocked) )阻塞状态(Blocked) (4)消亡状态(Dead thread) )消亡状态(Dead thread)
9.1.2 线程的控制
4. 终止一个线程 在程序中不能任意终止一个线程,否则可能 造成严重的线程安全问题.一个线程的终止 必须靠run()方法的正常返回.当一个线程从 必须靠run()方法的正常返回.当一个线程从 run()方法返回后,它就进入消亡状态,再也 run()方法返回后,它就进入消亡状态,再也 不能被运行了.结束run()方法还有另一种途 不能被运行了.结束run()方法还有另一种途 径,那就是在run()方法中抛出了异常,如果 径,那就是在run()方法中抛出了异常,如果 这些异常没有被捕获,JVM将会终止该线程. 这些异常没有被捕获,JVM将会终止该线程.
9.1.1 线程的概念
与程序的顺序执行相对的是程序的并发执行, 即一组逻辑上互相独立的程序或程序段在执 行过程中,其执行时间在客观上互相重叠. 程序的并发执行可以分成两种情况:一种是 多道程序系统中多道程序的并发执行,此种 情况下实际上是宏观上(程序级)同时进行, 微观上(指令级)顺序执行的;另一种是在 某道程序段的几个程序片段中,包含着一部 分可以同时执行或顺序颠倒执行的代码.程 序的并发执行是实现多线程技术的基础.
9.1.1 线程的概念
线程与进程类似,是一段完成特定功能的代 码.它是程序中单个顺序的控制流,也是一 个进程内的基本调度单位.线程和进程一样 拥有独立的执行控制,并由操作系统负责调 度.同一进程可以包含多个线程,这些线程 共享属于该进程的一块内存空间和一组系统 资源;而线程自身的数据通常只有微处理器 的寄存器数据,以及一个供程序执行时使用 的堆栈.系统在产生一个线程,或者在各个 线程之间切换时,负担要比进程小得多.此 外,由于线程只是在单个进程的作用域内活 动,所以线程间的通信也比进程简单.线程 的实现要依靠操作系统,现代操作系统一般 都支持线程技术.
第9章 图形用户界面

Java语言程序设计
第9章 图形用户界面
9.1 GUI概述
Java语言程序设计
第9章 图形用户界面
9.1 GUI概述
ponent类是许多组件类(如Button、Label)的父类,Component类中封装了组件通用的方法和 属性,如图形的组件对象、大小、显示位置、前景色、背景色、边界、可见性等,因此许多组件也继承了 Component类的成员方法和成员变量,这些成员方法是许多组件共有的方法,Component类常见的成员方法 如表9-1所示。
Java语言程序设计
第9章 图形用户界面
9.1 GUI概述
Java应用程序的图形用户界面(GUI)是通过Java API提供的java.awt或javax.swing包中的组件实现的。 这些组件所构成的GUI系统通常包含以下几个部分: (1)基本的图形用户界面组件:如菜单、按钮、文本字段等,展示系统可用的操作; (2)容器组件,如窗口、面板等,用于容纳基本组件; (3)布局管理组件,负责容器中组件的布局,进一步美化图形用户界面; (4)事件处理,用户通过图形界面进行操作时,会引发相应的事件,这些事件由一些特定的图形用户 界面组件监听并处理。 Java的java.awt和javax.swing包中包含了许多有关图形界面的类,AWT(Abstract Window Toolkit),中文译 为抽象窗口工具包,是一组Java类,此组java类允许创建图形用户界面,AWT提供用于创建生动而高效 的GUI的各种组件。Swing组件是在AWT组件基础上发展起来的新型GUI组件,完善了GUI组件的功能, 且实现时不包含依赖特定平台的代码,有更高的平台无关性和更好的移植性。因此本章主要介绍Swing 组件的用法,学习了Swing组件的用法后也可容易地学会AWT组件的用法。
Java程序设计电子教案第九章

上一页 下一页 返回
9.1图形处理 图形处理
// TestColor.Java import java.applet.Applet; import java.awt.Graphics; import java.awt.Font; import java.awt.Color; public class TestColor extends Applet { public void paint( Graphics g ) {
上一页 下一页 返回
9.1图形处理 图形处理
根据题目的要求, 根据题目的要求,我们使用一组随机数来指定直线两个端点 的坐标,并采用循环结构实现10次循环 次循环。 的坐标,并采用循环结构实现 次循环。drawLine方法 方法 中的4个整型参数代表直线两个端点的坐标 个整型参数代表直线两个端点的坐标。 中的 个整型参数代表直线两个端点的坐标。random()是 是 Math类中的一个方法,该方法返回一个 类中的一个方法, 类中的一个方法 该方法返回一个double值,值域为 值 类是java.1ang包的一部分 (0.0,1.0)。Math类是 . , . 。 类是 . 包的一部分 java.1ang可由编译器自动引入,所以我们不必把 可由编译器自动引入, . 可由编译器自动引入 所以我们不必把Math 类引入到程序中。直接调用random方法得到返回值太小, 方法得到返回值太小, 类引入到程序中。直接调用 方法得到返回值太小 在实际应用中往往乘以一个整数因子, 在实际应用中往往乘以一个整数因子,并强制类型转换 为 一个合适的整数。 一个合适的整数。如(int)(Math.random()x100)的 . 的 实际取值范围为[0, 实际取值范围为 ,100]。在图形方式下要想准确定位, 。在图形方式下要想准确定位, 必须了解屏幕坐标系的构成。 必须了解屏幕坐标系的构成。Java定义一个窗口工作区的左 定义一个窗口工作区的左 上角为坐标原点(o, ,以像素点为单位, 上角为坐标原点 ,o),以像素点为单位,顺序向右和向下 延伸。图形的大小如超过窗口,则超出部分不会显示出来。 延伸。图形的大小如超过窗口,则超出部分不会显示出来。
《Java语言程序设计》(第3版)第9章

第9章网络通信【1】java提供了哪几种网络通信模式?[解答]:基于TCP/IP协议的面向连接的通信模式,基于UDP协议的面向无连接的通信模式。
【2】java的套接字网络通信方式分为哪几种?[解答]:基于TCP/IP协议:客户端套接字,服务器端套接字。
基于UDP协议:用户数据报套接字,广播数据报套接字。
【3】什么是socket,怎样建立socket连接?建立连接时,客户端和服务器端有什么不同?[解答]:Socket就是套接字,是IP地址和端口号的组合。
当两个网络程序需要通信时,它们可以通过使用Socket类建立套接字连接。
服务器端建立Socket以后,要执行一个等待的方法,以方便客户端来连接。
客户端建立Socket以后即与服务器端进行连接,成功握手以后,双方产生同样的Socket对象。
【4】请列举常用的协议及其端口号。
[解答]:ftp 21/tcptelnet 23/tcpsmtp 25/tcphttp 80/tcppop3 110/tcpsnmp 161/udphttps 443/tcphttps 443/udppop3 110/tcp【5】试描述用Socket建立连接的基本程序框架。
[解答]:(1)客户端建立套接字对象,指定服务器IP和端口号。
(2)服务器端建立套接字,并指定端口号。
(3)服务器端监听本机的端口的状态:执行accept()方法。
(4)客户端程序在对象产生以后以及,服务器端的程序监听到有连接以后都会产生一个Socket类的实例。
(5)对这两个实例中对应的输入流和输出流进行操作,即完成通信过程。
【6】说明客户端如何与服务器端进行连接。
[解答]:TCP/IP的方式是:客户端产生Socket对象的同时产生与对应端口号的服务器连接的动作。
UDP数据报的方式是:客户端建立DatagramSocket对象,建立报文DatagramPacket对象,并指定发送的IP地址,调用socket对象的send方法进行连接并发送数据。
《Java程序设计案例教程》第09章

public static void main(String[] args) {
❖
//读取E 盘test.txt 中的内容,显示输出
❖
FileInputStream in = null;
❖
int b;
❖
try {
❖
in = new FileInputStream("E:/test.txt");
❖
while ((b = in.read()) != -1) {
▪ 对于这两个read()方法,如果读取文件时发生错误,则会抛出IOException的异常。
Java程序设计案例教程
幻灯片 8,共38页
8
FileOutputStream类
❖ (1)FileOutputStream类的构造方法 ▪ 创建一个指向file文件中写入字节数据的FileOutputStream对象 • public FileOutputStream(File file) throws FileNotFoundException ▪ 创建一个指向File文件中写入字节数据的FileOutputStream对象,且如果第2个参数为true,则将字节数据追加到 文件末尾处,否则将字节数据写入文件开始处覆盖原有的文件 • public FileOutputStream(File file,boolean append) throws FileNotFoundException ▪ 创建一个向具体指定名称为name的文件中写入字节数据的FileOutputStream对象 • public FileOutputStream(String name) throws FileNotFoundException ▪ 创建一个向具体指定名称为name的文件中写入字节数据的FileOutputStream对象,且如果第2个参数为true,则 将字节数据追加到文件末尾处,否则将字节数据写入文件开始处覆盖原有的文件 • public FileOutputStream(String name,boolean append) throws FileNotFoundException
Java语言程序设计课件第9章Java网络编程

• InetAddress 类提供了操作IP地址的各种方法。该类本身没有构造方法,而是通过调 用相关静态方法获取实例。常用方法:
方法名称 boolean equals(Object obj) byte[] getAddress() static InetAddress[] getAHByName(String host)
9.4.1 DATAGRAMPACKET类
• 在TCP/IP协议的传输层除了一个TCP协议之外,还有一个UDP协议。UDP协议是用户 数据报协议的简称,也用于网络数据的传输。虽然UDP协议是一种不太可靠的协议, 但有时在需要较快地接收数据并且可以忍受较小错误的情况下,UDP就会表现出更 大的优势。
9.1 JAVA 网络编程基础知识
• 9.1.1 网络协议 • 9.1.2 套接字和端口
9.1.1 网络协议
• 网络编程的目的就是直接或间接地通过网络协议与其他计算机进行通信。在Java语 言中包含网络编程所需要的各种类,编程人员只需要创建这些类的对象,调用相应 的方法,就可以进行网络应用程序的编写。
9.3.4 传输对象数据
• 经过前面的学习,掌握了如何在服务器开始一个端口监听套接字,以及如何在客户 端连接服务器,发送简单的数字。本次案例将实现如何在客户端发送一个对象到服 务器端,服务器如何解析对象中的数据。
9.4 JAVA UDP通信
• 9.4.1 DatagramPacket类 • 9.4.2 DatagramSocket类
9.3 JAVA TCP通信
• 9.3.1 ServerSocket 类 • 9.3.2 Socket 类 • 9.3.3 客户端与服务器端的简单通信 • 9.3.4 传输对象数据
9.3.1 SERVERSOCKET 类
Java程序设计 第九章 测验答案 慕课答案 UOOC优课 深圳大学继续教育学院

测验-9.2窗体一、多选题 (共100.00分)1.使用Swing编程时,如果要保证线程安全,需要使用哪几种线程:A.初始化线程B.事件调度线程C.工作线程正确答案:A B C测验-9.3菜单一、判断题 (共100.00分)1.快捷键是为了提升效率而设,菜单项一定要设置快捷键。
A.正确B.错误正确答案:B2.助记符是为了提升效率而设,菜单项一定要设置助记符。
A.正确B.错误正确答案:B测验-9.4布局管理一、判断题 (共100.00分)1.为了实现复杂的界面布局,JFrame的内容区可以设置多个Layout。
A.正确B.错误正确答案:B答案解析:只能设置一个。
可以添加JPanel,然后在JPanel上再设置其他布局。
测验-9.5常用组件一、判断题 (共100.00分)1.密码框类JPasswordField是文本框类JTextField的子类。
文本框用JTextField.getText()获取文本内容,密码框可以使用JPasswordField.getText()获取密码文本。
A.正确B.错误正确答案:B答案解析:应该使用JPasswordField.getPassword()测验-9.6常用对话框一、单选题 (共100.00分)1.String s = JOptionPane.showInputDialog(frame,"请输入您所在城市名称:");上面的代码执行后,会弹出一个输入对话框,如果用户点击对话框右上角上的“X”图标(关闭按钮),那么返回值s是:A.""B.nullC.NULLD.false正确答案:B测验-9.7事件处理一、多选题 (共100.00分)1.下面哪些是正确的?A.MouseAdapter是一个类B.MouseAdapter是一个接口C.MouseListener是一个类D.MouseListener是一个接口正确答案:A D。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在跨平台能力方面,SWT不如Swing优秀。但SWT具有可 以作为本地应用程序实现的优点,性能较高一些,并允许利用 基于SWT的GUI来实现本地兼容性。如果只为一种平台开发系 统,可以优先选用SWT。现在有一些成功的SWT案例,例如 开源集成开发环境Eclipse就是用Java和SWT开发的。
【例9-1】 创建窗体并设置窗体标题以及其他属性,然后 显示窗体。
import Javax.swing.*; public class HelloSwing {
public static void main(String[] args) { JFrame win = new JFrame(“HelloSwing的标题”); win.setSize(250,100); //设置窗口大小 win.setLocation(250,250);//设置窗口位置
综合来讲,Swing 具有内嵌于Java技术的优点,是完全 可移植的,无可争议,它是一种很好的架构。本章后面的章 节将对Swiget Toolkit(SWT),最初是由IBM开发的一 套用于Java的图形用户界面系统,现在由Eclipes基金会负责维 护,与Swing是竞争关系。
第 9 章 图形用户界面设计
9.1 AWT、Swing和SWT 9.2 一个简单例子 9.3 顶层容器 9.4 JFrame窗体 9.5 菜单 9.6 布局管理 9.7 常用组件 9.8 常用对话框 9.9 在Swing组件中使用HTML 9.10 事件处理 9.11 界面外观 9.12 并发编程与线程安全
9.1 AWT、Swing和SWT
9.1.1 AWT
Abstract Windows Toolkit(AWT)是最原始的Java GUI工具 包。AWT 是一个非常简单且功能相对有限,包括GUI组件、 布局管理器和事件的工具包。
AWT可以看做是对原生组件的一个包装,例如在Windows 操作系统下,当生成一个按钮时,Java会通过AWT调用 Windows API来创建原生按钮组件。这样的好处是控件的外观 跟平台上其他软件保持一致,但这也带来问题。因为不同的平 台下,GUI组件不是完全相同的,有些组件只在某些平台上有, 有些组件虽然在各种平台上都有,但是组件的行为却不完全一 致。
//在窗体上添加一个标签 JLabel label = new JLabel(“Hello Swing!”); win.add(label); //关闭窗口时,释放该窗体
win.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); //使窗体可见 win.setVisible(true);
为了使得Java能够“一次编写,到处运行”,AWT只得采 用最大公约数原则,即AWT只拥有所有平台上都存在的组件 的公有集合。最终的结果很不幸,有些经常使用的组件,例如 表、树、进度条等都不支持。对于需要它们的应用程序来说, 都要从头开始创建这些组件,这是一个很大的负担。
此外由于AWT要依赖平台GUI原生组件来实现GUI,导致 GUI的外观和行为(这一点更重要)在不同的平台上会有所不同。 这会导致“编写一次,到处测试(write once, test everywhere, 即 WOTE)”的情况发生,远远不能满足Java开发的要求。
鉴于上述缺点,一般不推荐使用AWT。虽然如此,但 Swing中的一些组件,如字体组件Font、绘图组件Graphics等是 由Java 2D提供的,它们是AWT的一部分。还有Swing中的消息 处理机制,也是采用AWT中的机制,并没有再独创一套。
9.1.2 Swing
Swing是试图解决AWT缺点的一种尝试。在Swing中,开 发了一个经过仔细设计的、灵活而强大的轻量级GUI工具包。 Swing是在AWT组件基础上构建的,例如Swing中的类JFrame 的父类是AWT中的类Frame,因此Swing也可被视作AWT的一 部分,或者为AWT的升级版。Swing 使用了AWT的事件模型 和一些支持类,例如 Colors、Images 和 Graphics。
9.2 一个简单例子
例9-1创建一个窗体,并设置窗体标题以及其他属性,然 后显示窗体。所有的代码都在HelloSwing.Java文件中。
通过例9-1可以看出,创建一个Java GUI程序非常简单。 在main方法中依次创建JFrame对象,设置其属性并显示。程序 代码的每一行功能请参考代码的注释。需要注意的是,这个例 子不是线程安全的,请参考相关编写线程安全的代码。
} } 程序运行结果如图9.1所示。
图9.1 例9-1的运行结果
9.3 顶 层 容 器
Swing中提供的图形界面相关的类大致可以分两类:容 器和组件。容器如JFrame,被用来放置各种组件。组件可以放 到中间容器中,也可以放到顶层容器中。中间容器有JPanel等, 顶层容器有JFrame、JDialog和JApplet。
Swing的特殊之处在于它是用纯Java写成的,因此里面的 组件称之为轻量级组件。Swing因为是用Java写成,所以它的 一大优点就是可以跨平台运行,可以在所有平台上采用统一的 行为。但轻量级组件的缺点是执行速度较慢。
轻量级组件在不同的平台上有相同的外观,这会使得 Windows下的Java程序界面不像Windows程序,Linux下的 Java程序界面不像Linux程序,它们只像Java程序,这会使得 程序的界面风格跟平台不一致。为解决这一问题,Swing现 在实时更换程序的外观主题(各种操作系统默认的特有主题), 然而它不是真的使用平台提供的原生主题,而是仅仅在表面 上模仿它们。