写了个桌面的小闹钟,在运行环境可以编译,但是打包成jar文件,想用批处理命令直接调用报错"找不到或无法加载主类".

需求

为防止整天久坐,编写一个桌面闹钟.该闹钟功能很简单,一个小时的倒计时,倒计时结束弹框提示起身运动下.点击确认后重新计时.且有一个复位按钮,可以重新计时.

代码

  1. 定义一个1小时的时间变量
  2. 创建一个GUI界面,有一个Label标签显示时间,一个Button进行复位操作
  3. 计时器每秒判断时间变量是否大于0.大于0减1,否则弹框提示并对时间变量复原
  4. 弹框点确认可以实现复位键的同样效果

代码如下:

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桌面小闹钟的更多相关文章

  1. 一键搞定Java桌面应用安装部署 —— exe4j + Inno Setup 带着JRE, 8M起飞

    转载自:http://www.blogjava.net/huliqing/archive/2008/04/18/193907.html 对于作Java桌面应用来说,比较烦人的就是安装部署问题,客户端是 ...

  2. Android桌面小插件——Widget

    Android桌面小插件--Widget 效果图 实现 1. 创建Widget类 创建一个Widget类,并实现页面创建的时候,就实现显示时间 package com.kongqw.kqwwidget ...

  3. 安卓开发笔记——Broadcast广播机制(实现自定义小闹钟)

    什么是广播机制? 简单点来说,是一种广泛运用在程序之间的传输信息的一种方式.比如,手机电量不足10%,此时系统会发出一个通知,这就是运用到了广播机制. 广播机制的三要素: Android广播机制包含三 ...

  4. 结合BeautyEye开源UI框架实现的较美观的Java桌面程序

    BeautyJavaSwingRobot 结合BeautyEye开源UI框架实现的较美观的Java桌面程序,主要功能就是图灵机器人和一个2345网站万年历的抓取.... 挺简单而且实用的一个项目,实现 ...

  5. Android开发中实现桌面小部件

    详细信息请参考原文:Android开发中实现桌面小部件 在Android开发中,有时候我们的App设计的功能比较多的时候,需要根据需要更简洁的为用户提供清晰已用的某些功能的时候,用桌面小部件就是一个很 ...

  6. Android菜鸟的成长笔记(25)——可爱的小闹钟

    摘要: 这一篇主要使用系统为我们提供的一个服务AlarmManager来制作一个Android小闹钟,同时还涉及到了自定义主题.判断第一次启动应用.自定义动画.对话框.制作指导滑动页面等方面.最后形成 ...

  7. Android-Widget桌面小组件

    1, 掌握Widget的用:Widget的用途,能够添加到手机桌面的程序 2, Widget的特点和用法步骤: 特点:快捷,方便,个性化,可自定义功能,可及时控制更新Widget显示内容 3, 用法步 ...

  8. Windows Java桌面应用程序集成slf4j实现日志持久化

    声明:迁移自本人CSDN博客https://blog.csdn.net/u013365635 Windows上一般的应用程序也可以通过日志系统打印日志到指定文件.通过这个例子想说明,问题处理的方法是多 ...

  9. python学习之——小闹钟(持续完善ing)

    "啊,坏了,我忘了那啥啥了~~~" 为了不坏了,动手做一个小闹钟吧,一点点完善的过程一定美好极了,必像等待培育许久的花儿绽放一样,不多说,加油,期待↖(^ω^)↗ #! /usr/ ...

  10. c#桌面小软件

    这是以前练习时用c#做的桌面小软件,今天回顾下. 这是设计界面 可以看出该程序能够播放网络歌曲及浏览新闻. 实现:歌曲来源百度API,播放WindowsMediaPlayer api地址:string ...

随机推荐

  1. Linux/Unix-CPU-SuperPI-Unixbench性能测试

    测试服务器CPU单核及多核SuperPI圆周率测试real和user值,SuperPI是利用CPU的浮点运算能力来计算出π(圆周率),测试系统稳定性和测试CPU计算完后特定位数圆周率所需的时间:及Un ...

  2. 文心一言 VS 讯飞星火 VS chatgpt (102)-- 算法导论9.3 8题

    八.用go语言,设 X[1..n]和 Y[1..n]为两个数组,每个都包含n个有序的元素.请设计一个 O(lgn)时间的算法来找出数组 X和Y中所有 2n 个元素的中位数. 文心一言: 要在 O(lg ...

  3. RK3588平台产测之ArmSoM产品低温环境测试

    1. 简介 专栏总目录 ArmSoM团队在产品量产之前都会对产品做几次专业化的功能测试以及性能压力测试,以此来保证产品的质量以及稳定性 优秀的产品都要进行严苛的多次全方位的功能测试以及性能压力测试才能 ...

  4. Python join拼接

    import os print(os.path.join("I","love","you.")) # /XXX 代表的是绝对路径 这个变量之 ...

  5. LocalDateTime、LocalDate、Date、String相互转化大全及其注意事项

    一.前言 大家在开发过程中必不可少的和日期打交道,对接别的系统时,时间日期格式不一致,每次都要转化! 每次写完就忘记了,小编专门来整理一篇来详细说一下他们四个的转换的方法,方便后面使用!! 二.Loc ...

  6. 虹科喜报 | 虹科技术工程师【国内首批】拿下Redis认证开发者证书!

    要说虹科数据库技术工程师有多强悍,认证考试2022年12月上线,次年2月就以全国首批速度强势通过考试,并于两周后正式收到[Redis认证开发人员]证书! 虹科小云忍不住浅浅炫耀一下: 或许大家对Red ...

  7. Terraform 系列-使用Dynamic Blocks对Blocks进行迭代

    系列文章 Terraform 系列文章 Grafana 系列文章 概述 Terraform 系列文章 介绍了使用 Grafana Terraform Provider, 基于 Terraform 的 ...

  8. JAVA多线程(2)——锁(对象锁和类锁)

    1.如下代码 1 public class TestSync1 implements Runnable { 2 Timer1 timer = new Timer1(); 3 public static ...

  9. [Python急救站课程]天天向上的力量

    我们要"好好学习,天天向上."那么天天向上的力量到底有多强呢? 1.一年365天,以第1天的能力值为基数,记为1.0,当好好学习时能力值相比前一天提高1‰,当没有学习时由于遗忘等原 ...

  10. Go 接口-契约介绍

    Go 接口-契约介绍 目录 Go 接口-契约介绍 一.接口基本介绍 1.1 接口类型介绍 1.2 为什么要使用接口 1.3 面向接口编程 1.4 接口的定义 二.空接口 2.1 空接口的定义 2.2 ...