首页 > 编程语言 >Java实验报告--计时器(线程)

Java实验报告--计时器(线程)

时间:2022-11-01 10:37:21浏览次数:34  
标签:Java -- 35 label bt add 线程 private new


一、实验目的

了解Java线程的使用方法

二、实验内容

1、使用多线程制作一计时器,要求实现文本框输入一个时间(分),计时结束后提示。

2、系统通过点击按钮可实现启动计时、暂停、结束计时、复位等功能。

三、实验步骤

借助windowBulider制作窗体界面,使用两个Date获取系统时间,通过两次时间相减来计算计时器经过了多长时间。

package test;



import java.awt.BorderLayout;

import java.awt.Button;

import java.awt.Font;

import java.awt.Frame;

import java.awt.Label;

import java.awt.TextField;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.util.Date;



public class thirdapp extends Frame {

private TextField tf = new TextField(30);

private TextField m = new TextField(2);

private TextField s = new TextField(2);

private TextField ms = new TextField(2);

private boolean start = false;

private boolean pause = false;

private int mSecond = 0;

private int second = 0;

private int min = 0;

private int time ;

private float diff = 0; //时间差

private float part = 0; //如要暂停时使用

private Date d1;

private Date d2;

private Button bt_start = new Button("\u5F00\u59CB");

MyThread mt = new MyThread();



thirdapp(){

super("计时器");

setSize(300, 240);

setVisible(true);

setLayout(null);



m.setFont(new Font("Dialog", Font.PLAIN, 35));

m.setBounds(40, 50, 50, 35);

m.setEditable(false);

add(m);



Label label = new Label(":");

label.setAlignment(Label.CENTER);

label.setFont(new Font("Dialog", Font.PLAIN, 35));

label.setBounds(90, 50, 25, 35);

add(label);



s.setFont(new Font("Dialog", Font.PLAIN, 35));

s.setBounds(115, 50, 50, 35);

s.setEditable(false);

add(s);



Label label_1 = new Label(":");

label_1.setAlignment(Label.CENTER);

label_1.setFont(new Font("Dialog", Font.PLAIN, 35));

label_1.setBounds(165, 50, 25, 35);

add(label_1);





ms.setFont(new Font("Dialog", Font.PLAIN, 35));

ms.setBounds(190, 50, 50, 35);

ms.setEditable(false);

add(ms);





bt_start.setBounds(187, 120, 65, 35);

add(bt_start);

bt_start.addActionListener(ActionStart);



tf.setFont(new Font("Dialog", Font.PLAIN, 34));

tf.setBounds(115, 120, 65, 35);

add(tf);



Label label_2 = new Label("\u8BF7\u8F93\u5165\u65F6\u957F");

label_2.setBounds(30, 125, 77, 25);

add(label_2);



Button bt_pause = new Button("\u6682\u505C");

bt_pause.setBounds(15, 180, 60, 35);

add(bt_pause);

bt_pause.addActionListener(ActionPause);



Button bt_reset = new Button("\u590D\u4F4D");

bt_reset.setBounds(147, 180, 60, 35);

add(bt_reset);

bt_reset.addActionListener(ActionReset);



Button bt_stop = new Button("\u7ED3\u675F");

bt_stop.setBounds(212, 180, 60, 35);

add(bt_stop);

bt_stop.addActionListener(ActionStop);



Button bt_continue = new Button("\u7EE7\u7EED");

bt_continue.setBounds(81, 180, 60, 35);

add(bt_continue);

bt_continue.addActionListener(ActionContinue);



addWindowListener(winclose);

mt.start();



}



WindowAdapter winclose = new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

};



ActionListener ActionStart = new ActionListener() {



@Override

public void actionPerformed(ActionEvent e) {

// TODO 自动生成的方法存根

start = true;



d1 = new Date();

time = Integer.parseInt(tf.getText());

tf.setEditable(false);

bt_start.setEnabled(false);



}

};

ActionListener ActionPause = new ActionListener() {



@Override

public void actionPerformed(ActionEvent e) {

// TODO 自动生成的方法存根

pause = true;

part = diff;



}

};

ActionListener ActionContinue = new ActionListener() {



@Override

public void actionPerformed(ActionEvent e) {

// TODO 自动生成的方法存根

d1 = new Date();



pause = false;



}

};



ActionListener ActionStop = new ActionListener() {



@Override

public void actionPerformed(ActionEvent e) {

// TODO 自动生成的方法存根

start = false;

bt_start.setEnabled(true);

}

};



ActionListener ActionReset = new ActionListener() {



@Override

public void actionPerformed(ActionEvent e) {

// TODO 自动生成的方法存根

start = false;

pause = false;

tf.setText("");

tf.setEditable(true);

m.setText("");

s.setText("");

ms.setText("");

min = 0;

second = 0;

mSecond = 0;

diff = 0;

part = 0;

bt_start.setEnabled(true);

}

};



class MyThread extends Thread{

public void run() {

while(true)

{

validate();

if(start && !pause)

{

d2 = new Date();

diff = d2.getTime() - d1.getTime() + part;

mSecond = (int)diff%1000/10;

second =(int) (diff/1000)%60;

min=(int)diff/1000/60;

m.setText(min+"");

s.setText(second+"");

ms.setText(mSecond+"");



try{

Thread.sleep(5);

}

catch(Exception e){

}



if((second+min*60)==time)

{

pause = true;

Frame fr = new Frame("时间到");



fr.setSize(100,100);

Label finish = new Label("时间到");

fr.add(finish, BorderLayout.CENTER);

fr.addWindowListener(winclose);

fr.setVisible(true);

}

}

}

}

}



public static void main(String[] args) {

thirdapp mt = new thirdapp();

}

}

四、实验总结

本次实验使我了解了Java的多线程机制,学会了如何创建并运行一个线程,运用多线程,可以进行一些更复杂的项目了。

标签:Java,--,35,label,bt,add,线程,private,new
From: https://blog.51cto.com/u_15847108/5811961

相关文章

  • 【转】Android之Spinner下拉列表 使用详解
    原文网址:(56条消息)Android之Spinner使用详解_浪漫主义码农的博客-CSDN博客_androidspinnerSpinner(列表选择框)的基本使用当我们的app需要用户输入数据时,除了让用户自......
  • Linux学习之进程
    通过ps命令可以查看到command为ttyn的就是它对应的进程,对应linux/dev/目录下的一个文件。进程进程process是指正在执行的程序;是程序正在运行的一个实例。它由程序指令......
  • Java的基本使用
    两个部分:一是理论、二是实践;这里的Java讲解来源于2010年之前,之后的改变看官网。一、Java的基本概念1Java发展历史由sun(Stanforduniversitynetwork)开发,1982年2月成立,2009年......
  • 【Python】AES.MODE_CBC和 AES.MODE_ECB 加解密
    AES加解密MODE_CBC和MODE_ECB两种模式的完整实现 importjsonfromCrypto.CipherimportAESimportbase64importbinascii#数据类classMData():def__i......
  • 用excel制作考勤表,你会吗
    平常单位的一些进货单出库单类的表格都是用excel制作的,今天单位没有考勤表了,于是我就用excel制作考勤表,这样就不用出去买了,而且单位人也少,我就可以以后利用电子考勤表来自动......
  • 操作系统知识
    目录导航:一:操作系统简介1.1操作系统的定义与作用1.2操作系统的功能及特征1.3操作系统的类型二:处理机管理2.1进程......
  • 设计模式-模板模式在Java中的使用示例
    场景模板模式模板模式又叫模板方法模式(TemplateMethodPattern),是指定义一个算法的骨架,并允许子类为一个或者多个步骤提供实现。模板模式使得子类可以在不改变算法......
  • Java解析cron表达式
    概述Cron表达式是一个字符串,以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,即两种语法格式:SecondsMinutesHoursDayofMonthMonthDayofWeekYear,即:秒分时天月星......
  • vue之列表排序-计算属性的应用
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><metahttp-e......
  • YAML&snakeyaml简介
    简介​​官网​​​YAML,YAMLAin’tMarkupLanguageWhatItIs:YAMLisahumanfriendlydataserializationstandardforallprogramminglanguages.最新版本1.2,Ja......