问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java定时让线程停止

发布网友 发布时间:2022-05-15 17:53

我来回答

1个回答

热心网友 时间:2024-02-26 00:27

我这儿有一个过年前写的定时关机程序你可以拿去参考下~
程序里的取消功能跟你要的差不多

import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
* 此类为定时关机的主界面类
* 这几天一直都在搞我的聊天程序,哎 但是技术问题,一直都做不走
* 之前一直都想写个定时关机程序,一直都是没时间,
* 现在那边做不走了,我就做做这个简单的,找点自信
* @author 程胜
* @date 09年1月24
* @address 家
* @version 0.1
*
*/
public class ShutDown extends JFrame{
private static final long serialVersionUID = 1L;
private JPanel pCenter=new JPanel();
private JPanel pNorth=new JPanel();
private JPanel pSouth=new JPanel();
private JButton bExit=new JButton("退出");
//用于显示当前时间
JLabel currentTime=new JLabel();
JButton bStart=new JButton("启动");
JButton bCancel=new JButton("取消");
JLabel info=new JLabel("请设定关机时间…………");
//此下拉框用于选择关机的小时
JComboBox hour=null;
//此下拉框用于先择关机的分钟
JComboBox minute=null;
/**
* 构造函数初始化界面
*/
public ShutDown(){
super("定时关机小程序verson0.1");
this.setSize(250,150);
addContent();
addEvent();
//改变大小不可用
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(this);
this.setVisible(true);

}
/**
* 为按钮添加事件监听
*/
private void addEvent() {
ActionListener buttonListen=new SetEvent();
bStart.addActionListener(buttonListen);
bCancel.addActionListener(buttonListen);
bExit.addActionListener(buttonListen);

}
/**
* 为界面添加内容
*/
private void addContent() {
//新建一个匿名线程,用于显示当前时间
new Thread(new Runnable(){
public void run(){
SimpleDateFormat sdf=new SimpleDateFormat("MM'月'dd'日'HH:mm:ss");
//Thread.interrupted()为判断线程是否中断
while(!Thread.interrupted()){
//获取当前时间
Calendar current=Calendar.getInstance();
ShutDown.this.currentTime.setText("当前时间为:"+sdf.format(current.getTime()));
try {
//休眠一秒
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

}
}).start();
//新建用于显示小时和分钟的字符串数组
String[] lHour=new String[24];
String[] lMinute=new String[60];

for(int i=0;i<24;i++){
lHour[i]=i+"";
}
for(int i=0;i<60;i++){
lMinute[i]=i+"";
}
hour=new JComboBox(lHour);
minute=new JComboBox(lMinute);
JLabel xiaoshi=new JLabel("时");
JLabel fen=new JLabel("分");
bCancel.setEnabled(false);
pNorth.setLayout(new FlowLayout());
pNorth.add(new JLabel("请设定关机时间:"));
pNorth.add(hour);pNorth.add(xiaoshi);
pNorth.add(minute);pNorth.add(fen);
pSouth.add(bStart);pSouth.add(bCancel);pSouth.add(bExit);
pCenter.setLayout(new GridLayout(2,1));
pCenter.add(currentTime);
pCenter.add(info);
this.add(pCenter,"Center");
this.add(pNorth,"North");
this.add(pSouth,"South");

}
/**
* @param args
*/
public static void main(String[] args) {
//设置外观
JFrame.setDefaultLookAndFeelDecorated(true);

new ShutDown();

}
/**
* 内置类,用于处理事件
* @author 程胜
*
*/
class SetEvent implements ActionListener{
//用于存放关机的操作类
private Shut shut=null;
private String hour="";
private String minute="";
//获得界面类
private ShutDown shutDown=ShutDown.this;
public void actionPerformed(ActionEvent e) {
//如果事件为启动按钮触发
if(e.getSource()==bStart){
//获取下拉框中的数据
hour=shutDown.hour.getSelectedItem().toString();
minute=shutDown.minute.getSelectedItem().toString();

handleStart();
}else{
//如果事件为取消按钮触发
if(e.getSource()==bCancel){
//取消操作
handleCancel();

}else{
//如果事件为退出按钮触发,则退出系统
System.exit(0);
}
}

}

/**
* 取消按钮的事件的处理方法
*/
private void handleCancel() {
//如果关机类还在活动
if(shut.isAlive()){
//停止关机类线程
shut.stop();
}
//修改界面显示
shutDown.info.setText("您取消了之前设定的定时关机!");
shutDown.hour.setEnabled(true);
shutDown.minute.setEnabled(true);
shutDown.bStart.setEnabled(true);
shutDown.bCancel.setEnabled(false);

}

/**
* 启动按钮的事件的处理方法
*/
private void handleStart() {

shutDown.info.setText("您设置的关机时间是"+(hour.length()==1?"0"+hour:hour)+"时"+(minute.length()==1?"0"+minute:minute)+"分");
shutDown.hour.setEnabled(false);
shutDown.minute.setEnabled(false);
shutDown.bStart.setEnabled(false);
shutDown.bCancel.setEnabled(true);
//新建并启动关机线程
shut=new Shut(Byte.parseByte(hour),Byte.parseByte(minute));
shut.start();

}

}

}
/**
* 此类为实现关机操作的类,是一个线程类
* @author Administrator
*
*/
class Shut extends Thread{
//获取当前日期及时间
private Calendar shutTime=Calendar.getInstance();
private Calendar currentTime;
private byte hour=0;
private byte minute=0;
public Shut(byte hour,byte minute){
this.hour=hour;
this.minute=minute;
}
/* 覆写run方法
*
*/
public void run(){
//调用关机时间处理方法
handleTime();
while(!Thread.interrupted()){
//循环获取系统时间
currentTime=Calendar.getInstance();
//如果关机时间在当前时间之前
if(shutTime.before(currentTime)){
//调用关机方法
shutDown();
//退出系统
System.exit(0);
}
try {
//线程休眠一秒
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* 关机方法
*/
private void shutDown() {
String shutdown="shutdown -s";
Runtime rt=Runtime.getRuntime();
try {
rt.exec(shutdown);
} catch (IOException e) {
e.printStackTrace();
}

}
/**
* 用于计算关机的时间
*/
private void handleTime() {
java.util.Date date=new java.util.Date();
if(date.getHours()>hour){
date.setDate(date.getDate()+1);
}if(date.getHours()==hour){
if(date.getMinutes()>minute){
date.setDate(date.getDate()+1);
}
}
date.setHours(hour);date.setMinutes(minute);
date.setSeconds(0);
shutTime.setTime(date);
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
64岁的老头感冒了,还喝一瓶啤酒,又喝3包感冒药,吃了3个阿莫西林消炎药... ...今天中午12点喝了一瓶啤酒,不会有反应死了吧? 喝一瓶啤酒吃药没事吧 养育孩子有哪些正确的方式? 联想电脑一开机就蓝屏怎么解决 光遇冥想任务怎么完成_冥想任务攻略 光遇 光遇云野的锦鲤池冥想怎么做? 光遇 光遇在滑冰场旁冥想的任务怎么做? 光遇在仙乡的金塔下冥想任务怎么做 任务达成方法介绍 光遇 光遇在禁阁的神坛旁冥想怎么做? 打算去义乌做电商了,在哪里做合适? 义乌电商租房 来义乌做电商是一种怎样的体验? java定时线程占用服务器资源吗? 义乌市前店村外来人口分布数据 湖北省+天门市+义乌路华泰电商产业园B区二楼B3+是哪个区? 北苑小区到义乌顺丰电商园公交线路 义乌市跨境电子商务园区有限公司怎么样? 从南方联到义乌顺丰电商产业园的公交车 义乌跨界好物数字经济园属于哪个街道 义乌电子商务集中地 义乌跨境电子商务园区的介绍 我想请问一下在Excel中如何将数字与数字之间的距离变小如 猫不抓老鼠!应该怎样才能让猫;像以前那样去抓老鼠?可以吗? 猫没有见过老鼠怎么教猫抓老鼠? 中国当代名家长篇小说代表作的入选书目 谁知道有网上阅读的蹉跎岁月的地址吗 网上阅读叶辛的&lt;蹉跎岁月&gt;的地址 《蹉跎岁月》pdf下载在线阅读全文,求百度网盘云资源 搭建一个网络直播教育平台需要多少钱 义乌市北苑春华路588号幸福里电商园区c1幢108至110号怎么走 黄精、葛根、芡实、玛咖、枸杞子、蝗虫草、人参、肉桂、覆盆子、黑芝麻这些药有什么功效和作用 电脑怎么登录两个 义乌科技创业园到陆港电商小镇怎么走 用java写一个线程,指定其在每天晚上12点运行一次,求方法? java定时任务使用多线程webservcie执行了两次这是为什么? 下列关于硬水、软水的说法正确的是(  )A.硬水含杂质多,软水含杂质少B.硬水是混合物,软水是纯净物 人工栽培人参、黄精、茯苓、山药、枸杞子、肉桂、覆盆子、芡实、陈皮、蜂蜜这些放在一起熬的膏药服用后起 有人说硬水是混合物,软水是纯净物,对么 java 线程怎么实现定时中断 java定时任务内的线程可以输出语句到控制台吗? java大神看过来,关于java多线程并发和定时器的问题!!! 我要自考本科,很快就要考英语二,谁有英语二的复习资料和真题(包答案)可以共享一下。。。谢谢 哈弗h6set键在哪里 重水 超重水 蒸馏水 自来水 软水 硬水 矿泉水 海水 汗水 河水 湖水,哪些是纯净物? 编程:JAVA如何让线程每天8点执行一次 JAVA定时器运行状态确认 电脑如何登陆两个 宝宝1岁了,上早教中心早吗? 出生十一天的婴儿喂多少奶粉