南邮java实验_南邮JAVA程序设计实验4 线程程序设计(指针式时钟)
南邮JAVA程序设计实验4 线程程序设计(指针式时钟)
实验目的:
本实验旨在通过实验,培养学生将JAVA 线程的相关知识点(包括线程调度,线程同步等)有机结合并加以综合应用,在实验中设计多线程程序的能力。
实验内容:
设计和编写一个编写一个指针式时钟程序,应用线程实现时钟的走动。
实验设计:
主要是控制时针分针秒针的转动度数,这个直接通过坐标的三角函数值求得,线程方面,隔一秒休眠一下,然后通过时分秒的换算关系来改变三个对应指示针在时钟上的位置
实验代码:
import java.awt.*;
import javax.swing.*;
import java.util.*;
public class JavaClock extends JFrame {
public JavaClock() {
ClockPaint cp = new ClockPaint(20, 20, 70);
this.add(cp);
this.setSize(200, 200);
this.setLocation(260, 120);
this.setTitle("指针时钟");
this.setVisible(true);
this.setResizable(false);
}
public static void main(String[] s) {
new JavaClock();
}
}
class ClockPaint extends JPanel implements Runnable {
int x, y, r;
int hour, minute, second; //时,分,秒
final double rad = Math.PI / 180;
public ClockPaint(int x, int y, int r) {
this.x = x;
this.y = y;
this.r = r;
Calendar now = new GregorianCalendar();
//获得时间转换成度数
second = now.get(Calendar.SECOND) * 6;
minute = now.get(Calendar.MINUTE) * 6;
hour = (now.get(Calendar.HOUR_OF_DAY) - 12) * 30 + now.get(Calendar.MINUTE) / 12 * 6;
Thread t = new Thread(this);
t.start();
}
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.WHITE);
g.fillRect(0, 0, r * 3, r * 3);
g.setColor(Color.BLACK);
g.drawOval(x, y, r * 2, r * 2);
//秒针
g.setColor(Color.GREEN);
int x1 = (int)((r - 10) * Math.sin(rad * second));
int y1 = (int)((r - 10) * Math.cos(rad * second));
g.drawLine(x + r, y + r, x + r + x1, y + r - y1);
//分针
g.setColor(Color.BLUE);
x1 = (int)((r - r / 2.5) * Math.sin(rad * minute));
y1 = (int)((r - r / 2.5) * Math.cos(rad * minute));
g.drawLine(x + r, y + r, x + r + x1, y + r - y1);
//时针
g.setColor(Color.RED);
x1 = (int)((r - r / 1.5) * Math.sin(rad * hour));
y1 = (int)((r - r / 1.5) * Math.cos(rad * hour));
g.drawLine(x + r, y + r, x + r + x1, y + r - y1);
//数字
g.setColor(Color.BLACK);
int d = 28;
for (int i = 1; i <= 12; i++) {
x1 = (int)((r - 10) * Math.sin(rad * d));
y1 = (int)((r - 10) * Math.cos(rad * d));
g.drawString(i + "", x + r + x1 - 4, x + r - y1 + 5);
d += 30;
}
//刻度线
d = 0;
for (int i = 0; i < 60; i++) {
int len = 0; //控制每个分割点的长度,数字点上的分割线长一点
if(d % 30 == 0) {
len = 5;
}
else {
len = 2;
}
for (int j = 1; j <= len; j++)
{
x1 = (int)((r - j) * Math.sin(rad * d));
y1 = (int)((r - j) * Math.cos(rad * d));
g.drawString(".", x + r + x1 - 1, x + r - y1 + 1);
}
d += 6;
}
}
public void run() {
while (true) {
try {
Thread.sleep(1000); //休眠一秒
}
catch (Exception ex) {
}
second += 6; //每一秒,秒针动6度
if (second == 60 || second == 120 || second == 180 || second == 240 || second == 300) {
minute += 1; //每10秒,分针动1度
}
//大于一分钟,分针和时针开始出现改变
if (second == 360) {
second = 0;
minute += 1;
if (minute == 72 || minute == 144 || minute == 216 || minute == 288) {
hour += 6;
}
if (minute >= 360) {
minute = 0;
hour += 6;
}
if (hour >= 360) {
hour = 0;
}
}
this.repaint();
}
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
南邮java实验_南邮JAVA程序设计实验4 线程程序设计(指针式时钟)相关推荐
- groovy 使用java类_深入学习java中的Groovy 和 Scala 类
前言 Java 传承的是平台,而不是语言.有超过 200 种语言可以在 JVM 上运行,它们之中不可避免地会有一种语言最终将取代 Java 语言,成为编写 JVM 程序的最佳方式.本系列将探讨三种下一 ...
- java 枚举_深入理解Java枚举
所有知识体系文章,[GitHub](https://github.com/Ziphtracks/JavaLearningmanual)已收录,欢迎Star!再次感谢,愿你早日进入大厂! https:/ ...
- java翻译程序_有没有java代码翻译软件?
展开全部 没有翻译软件,但是能32313133353236313431303231363533e78988e69d8331333365646333编写翻译程序. java 代码翻译实例: 1.输入一个 ...
- opencv java 摄像头_使用OpenCV Java创建Windows摄像头扫码程序
OpenCV提供了一些基本的Webcam控制接口.用OpenCV C/C++或者Python,可以在任意平台快速创建一个摄像头预览应用.然而使用Java,情况就复杂的多,因为OpenCV Java并没 ...
- java横线_知识点:java一些方法会有横线?以Date 过期方法为例
原因:他们的开发者在升级方法后,添加了@Deprecated注释, 目的是为了提醒我们,这个方法现在已经有新的方法了,不建议继续使用! 比如: JAVA中Date的tolocalstring为什么不建 ...
- java学习_都说Java难学,不知道具体的学习内容?全套Java学习路线送上
首先,我个人比较推崇的学习方法是:先学java前段,也就是HTML,css,js,因为学习java以后肯定是往java ee方向发展的,学习完前端,在学习后端很多东西比计较容易理解! 其中J2SE是关 ...
- 本地生活JAVA版本_赶集生活java版
赶集网java版客户端 特色介绍: * 丰富的特色功能:一键拨号.GPS定位.本地收藏.拍照发帖,比电脑还方便. * 全面的服务功能:房屋租售.二手买卖.火车票转让.家政.开锁等全方位服务. * 极致 ...
- java 虚拟机_浅谈Java虚拟机内存区
1. Java 虚拟机内存区概述 我们在编写程序时,经常会遇到OOM(out of Memory)以及内存泄漏等问题.为了避免出现这些问题,我们首先必须对JVM的内存划分有个具体的认识.JVM将内存主 ...
- java序列化_技术干货 | JAVA反序列化漏洞
目录 反序列化漏洞 序列化和反序列化 JAVA WEB中的序列化和反序列化 对象序列化和反序列范例 JAVA中执行系统命令 重写readObject()方法 Apache Commons Collec ...
最新文章
- redis-5.0.4集群部署
- TFS2008 基本安装
- 052_Function对象
- 支付和清算就是信息流和资金流
- jsp中使用cookie时报错……
- 数据科学 python_适用于数据科学的Python vs(和)R
- java基础—Objcet中的equals方法重写
- 华为还是输了!双11战报出炉,离苹果仍有距离
- Jar运行的几个方法
- 编程之美读书笔记2.15 - 子数组之和的最大值(二维)
- Linux命令:more
- 并发学习之CyclicBarrier循环栅栏
- Kubernetes SharedInformerFactory共享Informer机制源码深入剖析-Kubernetes商业环境实战
- 怎么重置计算机网络设置密码,怎么重新设置wifi密码_如何重新设置无线密码?-192路由网...
- unison + inotify 实现文件实时双向同步部署步骤
- 2017 ECNA Regional Contest-G:Question of Ingestion(dp)
- 分享湖南软大自动健康打卡思路
- 十一、Cadence ic 617以及assura使用总结
- 7-1 sdut-oop-7 答答租车系统(类的继承与多态 面向对象综合练习) (30 分)
- 详解百度地图API之地图标注
热门文章
- html文档是哪个版本,HTML 简介, 版本和文档类型声明
- Project build error: Non-resolvable parent POM for com.example:demo:0.0.1-SNAPSHOT: Could not transf
- 短信通知-阿里大鱼 申请AK 发送Until
- 关于后缀表达式的转换
- java表格组件_表格组件 java
- 13商软 团队博客 列表
- SEO中的十大关键词竞争度分析方法
- Docker之工作中常用的命令(二)
- 「开发者说」多系统集成开发-企业自有系统快速上钉钉
- DTM使用途中的bug记录