您好,欢迎来到好土汽车网。
搜索
您的当前位置:首页JAVA线程程序设计(小时钟)实验报告(附完整代码)

JAVA线程程序设计(小时钟)实验报告(附完整代码)

来源:好土汽车网
线程程序设计

一、 课题内容和要求

内容:设计和编写一个编写一个指针式时钟程序,应用线程实现时钟的走动。

要求:本实验旨在通过实验,培养学生将JAVA 线程的相关知识点(包括线程调度,线程同步等)有机结合并加以综合应用,在实验中设计多线程程序的能力。

二、设计思路分析

class Clock:一个指针式时钟的主类 class Layout: 添加窗口和时钟组件 class ClockPaint:定义时钟组件

三、概要设计

public class Clock extends JFrame {

}

class Layout extends JFrame {

}

class ClockPaint extends JPanel implements Runnable {

int x, y, r; int h, m, s;

double rad = Math.PI / 180;

public ClockPaint(int x, int y, int r); public void paint(Graphics g); public void run(); }

时钟的绘制:

public Layout();

public static void main(String[] s) ;

运行时钟:

四、详细设计

import java.awt.*; import javax.swing.*; import java.util.*;

public class Clock extends JFrame { public static void main(String[] s) { new Layout(); } }

class Layout extends JFrame {// 添加窗口和时钟组件 public Layout() { ClockPaint cp = new ClockPaint(20, 20, 70); add(cp);

setBounds(260, 120, 200, 200); setResizable(false); this.setTitle(\"指针式时钟\"); this.setVisible(true); } }

class ClockPaint extends JPanel implements Runnable {// 定义时钟组件 int x, y, r;// 时钟的位置坐标和半径 int h, m, s;// 小时,分钟,秒 double rad = Math.PI / 180;// 定义弧度 public ClockPaint(int x, int y, int r) {// 构造函数 this.x = x; this.y = y; this.r = r; Calendar now = Calendar.getInstance();// 初始化日历对象 s = now.get(Calendar.SECOND) * 6;// 获得初始秒转换成度数 m = now.get(Calendar.MINUTE) * 6;// 获得初始分钟转换成度数 h = (now.get(Calendar.HOUR_OF_DAY) - 12) * 30 + now.get(Calendar.MINUTE) * 6 / 12;// 获得初始小时转换成度数加分钟实现连贯 Thread t = new Thread(this);// 新建线程 t.start();// 启动线程 } public void paint(Graphics g) {// 绘制时钟 g.setColor(Color.BLACK);// 画背景 g.fillRect(0, 0, r * 3, r * 3); g.setColor(Color.WHITE);// 画圆 g.drawOval(x, y, r * 2, r * 2); int d = 0;// 每6度画一个小点 int x1, y1, x2, y2; for (int i = 0; i < 60; i++) { x1 = (int) ((r - 2) * Math.sin(rad * d)); y1 = (int) ((r - 2) * Math.cos(rad * d)); g.drawString(\".\ d += 6; } d = 30;// 从30度开始每30度画一个数字和一线

}

for (int i = 1; i <= 12; i++) { x1 = (int) ((r - 14) * Math.sin(rad * d)); y1 = (int) ((r - 14) * Math.cos(rad * d)); g.drawString(i + \"\ x1 = (int) ((r - 6) * Math.sin(rad * d)); y1 = (int) ((r - 6) * Math.cos(rad * d)); x2 = (int) ((r - 2) * Math.sin(rad * d)); y2 = (int) ((r - 2) * Math.cos(rad * d)); g.drawLine(x + r + x2, y + r - y2, x + r + x1, y + r - y1); d += 30; }

g.setColor(Color.RED);// 按时间画秒针 x1 = (int) ((0.8 * r) * Math.sin(rad * s)); y1 = (int) ((0.8 * r) * Math.cos(rad * s));

g.drawLine(x + r, y + r, x + r + x1, y + r - y1); g.setColor(Color.BLUE);// 按时间画分针 x1 = (int) ((0.6 * r) * Math.sin(rad * m)); y1 = (int) ((0.6 * r) * Math.cos(rad * m)); g.drawLine(x + r, y + r, x + r + x1, y + r - y1); g.setColor(Color.YELLOW);// 按时间画时针 x1 = (int) ((0.4 * r) * Math.sin(rad * h)); y1 = (int) ((0.4 * r) * Math.cos(rad * h));

g.drawLine(x + r, y + r, x + r + x1, y + r - y1);

g.setColor(Color.GREEN);// 显示时间 Calendar now1 = Calendar.getInstance(); g.drawString( now1.get(Calendar.HOUR_OF_DAY) + \":\" + now1.get(Calendar.MINUTE) + \":\" + now1.get(Calendar.SECOND), 0, 10);

public void run() {// 运行时钟 while (true) { try { Thread.sleep(1000);// 中断一秒后重新运行 } catch (Exception ex) { System.out.println(ex); } s += 6;// 秒针走6度 if (s >= 360) {// 秒针走完一分钟后重置

}

}

}

s = 0; m += 6; if (m == 72 || m == 144 || m == 216 || m == 288) {// 分针走完5分钟后重置 h += 6; } if (m >= 360) {// 分针走完一小时后重置 m = 0; h += 6; } if (h >= 360) {// 时针走完12小时后重置 h = 0; } }

this.repaint();// 重新绘制时钟

五、测试数据及其结果分析

1时钟界面:

2结果:输出正常。

六、调试过程中的问题

一开始没有考虑分钟走五分钟时针应走一小格,在参考机械时钟的设计后,实现了时钟的连贯走动。

七、程序设计总结

1、通过该实验掌握了应用线程实现时钟的走动的方法。 2、学会了编写时钟的算法、多线程的设计与使用。

3、在逐步地优化和调试中实现了一个较切合实际的时钟界面。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- howto234.com 版权所有 湘ICP备2022005869号-3

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务