java桌面小闹钟
写了个桌面的小闹钟,在运行环境可以编译,但是打包成jar文件,想用批处理命令直接调用报错"找不到或无法加载主类".
需求
为防止整天久坐,编写一个桌面闹钟.该闹钟功能很简单,一个小时的倒计时,倒计时结束弹框提示起身运动下.点击确认后重新计时.且有一个复位按钮,可以重新计时.
代码
- 定义一个1小时的时间变量
- 创建一个GUI界面,有一个Label标签显示时间,一个Button进行复位操作
- 计时器每秒判断时间变量是否大于0.大于0减1,否则弹框提示并对时间变量复原
- 弹框点确认可以实现复位键的同样效果
代码如下:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.Timer;
public class AlarmClock {
private static int countdownTime = 60*60 ; //一小时倒计时
private static int countTime = 0;
private static JFrame frame;
private static JLabel timeLabel;
private static JButton resetButton;
private static JLabel uptimeLabel;
public static void main(String[] args) {
createdUI();
}
private static void createdUI(){
frame = new JFrame("电脑桌面闹钟");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300,200);
frame.setLayout(new FlowLayout());
timeLabel = new JLabel("剩余时间:"+countdownTime/60 +"分钟"+countdownTime%60+"秒;计时:");
frame.add(timeLabel);
uptimeLabel = new JLabel("00:00:00",SwingConstants.CENTER);
frame.add(uptimeLabel);
resetButton = new JButton("复位");
resetButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
countdownTime = 60*60 ; // 重新开始一小时计时
countTime = 0;
updateTimeLabel();
}
});
frame.add(resetButton);
Timer timer = new Timer(1000,new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (countdownTime > 0) {
countdownTime --;
countTime++;
updateTimeLabel();
}else{
showDialog(frame);
}
}
});
timer.start();
frame.setVisible(true);
}
private static void updateTimeLabel(){
timeLabel.setText("剩余时间:"+countdownTime/60+"分钟"+countdownTime%60+"秒");
int hours = countTime /3600;
int minutes = (countTime % 3600)/60;
int remainingSeconds = countTime % 60;
uptimeLabel.setText(String.format("%02d:%2d:%2d", hours,minutes,remainingSeconds));
}
private static void showDialog(JFrame parent){
JDialog jDialog = new JDialog(parent,"确认对话框",true);
jDialog.setSize(200,100);
JButton okButton = new JButton("确认");
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (e.getSource() == okButton) {
countdownTime = 60*60 ;
countTime = 0;
timeLabel.setText("剩余时间:"+countdownTime/60+"分钟"+countdownTime%60+"秒");
uptimeLabel.setText("00:00:00");
}
jDialog.dispose();
}
});
JPanel panel = new JPanel();
panel.add(okButton);
jDialog.getContentPane().add(panel,BorderLayout.CENTER);
//获取屏幕尺寸和对话框尺寸,计算居中位置
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int x = (screenSize.width - jDialog.getWidth()) /2 ;
int y = (screenSize.height - jDialog.getHeight()) / 2;
//设置对话框位置
jDialog.setLocation(x,y);
//设置对话框始终位于顶部
jDialog.setAlwaysOnTop(true);
//设置对话框为模态对话框
jDialog.setModal(true);
jDialog.setVisible(true);
}
}
编译运行
打开dos命令窗口进入当前文件夹,执行以下命令
1. 编译
javac -encoding UTF-8 AlarmClock.java
2. 生成jar文件
jar cvfe MyClock.jar AlarmClock *.class
3. 运行
java -jar MyClock.jar
为便于使用,可直接写bat处理文本.
新建一个MyClock.bat的文件,文件内容为
START java.exe -jar MyClock.jar
将该bat文件发送到桌面快捷方式,每次双击该bat程序即可.
遇到问题记录
1. 编译报错
错误:找不到或无法加载主类
解决:编写代码在开发软件中,没有定义包,但有默认src路径,在类文件当前路径编译运行报错.将文件包引入删除即可.
java桌面小闹钟的更多相关文章
- 一键搞定Java桌面应用安装部署 —— exe4j + Inno Setup 带着JRE, 8M起飞
转载自:http://www.blogjava.net/huliqing/archive/2008/04/18/193907.html 对于作Java桌面应用来说,比较烦人的就是安装部署问题,客户端是 ...
- Android桌面小插件——Widget
Android桌面小插件--Widget 效果图 实现 1. 创建Widget类 创建一个Widget类,并实现页面创建的时候,就实现显示时间 package com.kongqw.kqwwidget ...
- 安卓开发笔记——Broadcast广播机制(实现自定义小闹钟)
什么是广播机制? 简单点来说,是一种广泛运用在程序之间的传输信息的一种方式.比如,手机电量不足10%,此时系统会发出一个通知,这就是运用到了广播机制. 广播机制的三要素: Android广播机制包含三 ...
- 结合BeautyEye开源UI框架实现的较美观的Java桌面程序
BeautyJavaSwingRobot 结合BeautyEye开源UI框架实现的较美观的Java桌面程序,主要功能就是图灵机器人和一个2345网站万年历的抓取.... 挺简单而且实用的一个项目,实现 ...
- Android开发中实现桌面小部件
详细信息请参考原文:Android开发中实现桌面小部件 在Android开发中,有时候我们的App设计的功能比较多的时候,需要根据需要更简洁的为用户提供清晰已用的某些功能的时候,用桌面小部件就是一个很 ...
- Android菜鸟的成长笔记(25)——可爱的小闹钟
摘要: 这一篇主要使用系统为我们提供的一个服务AlarmManager来制作一个Android小闹钟,同时还涉及到了自定义主题.判断第一次启动应用.自定义动画.对话框.制作指导滑动页面等方面.最后形成 ...
- Android-Widget桌面小组件
1, 掌握Widget的用:Widget的用途,能够添加到手机桌面的程序 2, Widget的特点和用法步骤: 特点:快捷,方便,个性化,可自定义功能,可及时控制更新Widget显示内容 3, 用法步 ...
- Windows Java桌面应用程序集成slf4j实现日志持久化
声明:迁移自本人CSDN博客https://blog.csdn.net/u013365635 Windows上一般的应用程序也可以通过日志系统打印日志到指定文件.通过这个例子想说明,问题处理的方法是多 ...
- python学习之——小闹钟(持续完善ing)
"啊,坏了,我忘了那啥啥了~~~" 为了不坏了,动手做一个小闹钟吧,一点点完善的过程一定美好极了,必像等待培育许久的花儿绽放一样,不多说,加油,期待↖(^ω^)↗ #! /usr/ ...
- c#桌面小软件
这是以前练习时用c#做的桌面小软件,今天回顾下. 这是设计界面 可以看出该程序能够播放网络歌曲及浏览新闻. 实现:歌曲来源百度API,播放WindowsMediaPlayer api地址:string ...
随机推荐
- Django框架项目——BBS项目介绍、表设计、表创建同步、注册、登录功能、登录功能、首页搭建、admin、头像、图片防盗、个人站点、侧边栏筛选、文章的详情页、点赞点踩、评论、后台管理、添加文章、头像
文章目录 1 BBS项目介绍.表设计 项目开发流程 表设计 2 表创建同步.注册.登录功能 数据库表创建及同步 注册功能 登陆功能 3 登录功能.首页搭建.admin.头像.图片防盗.个人站点.侧边栏 ...
- Go语言常用标准库——context
文章目录 为什么需要Context 基本示例 全局变量方式 通道方式 官方版的方案 Context初识 Context接口 Background()和TODO() With系列函数 WithCance ...
- 采用ResNet网络+TSNE降维算法对自建图像数据集进行二维可视化显示
起因:某一天下午,我在"玩"的时候,突然接到了老板的电话,说是要对图像做可视化降维.因此,我拿到了一批图像的数据. 数据的特点: 1.数据集的图像分为4类,并且每一种类的图像多少不 ...
- 传纸条 luoguP1006
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排坐成一个 mm 行 nn 列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈 ...
- 为.NET打开新大门:OpenVINO.NET开源项目全新发布
为.NET打开新大门:OpenVINO.NET开源项目全新发布 在AI的应用越来越广泛的今天,优化深度学习模型并进行推理部署已经成为了一门必要的技术.Intel开发的OpenVINO工具包(Open ...
- hammer.js学习
demo:https://github.com/fei1314/HammerJs/tree/master 知识点: hammer--手势识别:点击.长按.滑动.拖动.旋转.缩放 方法: tap 快速的 ...
- kubernetes发布周期
前言 页面介绍了版本发布的一些时间点和PR的要求,通过了解k8s的发布周期来规划自己的版本选择. 合并PR的要求 如果你希望将你的代码合并到官方代码仓库中,不同的开发阶段需要有不同的标签和里程碑.也是 ...
- Kubernetes文档支持的版本
简介 https://kubernetes.io/zh-cn/docs/ 官方中文网站一共是可以阅读5个k8s版本的文档.这5个版本包括k8s最新版和最近的4个版本.例如当前最新版是1.28,那么文档 ...
- 飞码LowCode前端技术系列(二):如何便捷配置出页面 | 京东云技术团队
一.配置解法 飞码LowCode前端技术(一)中飞码提出了至少需要满足2个大能力点以及对应16个细化点.在业务复杂的场景下数据具有流转性质,事件的触发会改变数据.同时也会触发其他事件等情况.飞码使用数 ...
- Atcoder Regular Contest 165
B. Sliding Window Sort 2 被题目名里的滑动窗口误导了,于是卡 B 40min /fn Description 给定长度为 \(n\) 的排列 \(P\) 和一个整数 \(K\) ...