springboot mybatis-plus swing实现报警监听
通过声音控制报警器,实现声光报警,使用beautyeye_lnf.jar美化界面如下


@EnableTransactionManagement(proxyTargetClass = true)
@SpringBootApplication
@EnableScheduling
public class AlarmWarnApplication {public static void main(String[] args) {try {org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.translucencyAppleLike;UIManager.put("RootPane.setupButtonVisible", false);} catch(Exception e) {//TODO exception}new SpringApplicationBuilder(AlarmWarnApplication.class).headless(false).run(args);//显示界面ViewStart.run();}}
public class ViewStart {public static void run() {EventQueue.invokeLater(new Runnable() {public void run() {try {SpringContextUtils.getBean(SwingArea.class).setVisible(true);} catch (Exception e) {e.printStackTrace();}}});}
}
@Component("SwingArea")
@Scope("prototype") //创建多例
@SuppressWarnings("all")
public class SwingArea extends JFrame {private ImageIcon imageIcon;private URL url;private JLabel imageLabel;private JLabel label;private JButton openBtn;private Timer timer;private AudioPlay audioPlay;@Autowiredprivate DevicealarmMapper devicealarmMapper;public SwingArea() {//报警要加载的音乐InputStream inputStream = getClass().getResourceAsStream("/music/music.wav");System.out.println(inputStream);audioPlay = new AudioPlay(inputStream);setTitle("报警监听程序");setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {// 处理关闭事件,例如显示确认对话框int option = JOptionPane.showConfirmDialog(SwingArea.this, "确定要关闭报警监听吗?", "提示", JOptionPane.YES_NO_OPTION);if (option == JOptionPane.YES_OPTION) {// 用户确认关闭,执行关闭操作dispose();}}});setResizable(false);setLayout(null);//尺寸setSize(800, 500);//背景图片((JPanel)this.getContentPane()).setOpaque(false);url = this.getClass().getResource("/music/green.png");imageIcon = new ImageIcon(url); //添加图片imageLabel = new JLabel(imageIcon);imageLabel.setBounds(0, 0, imageIcon.getIconWidth(), imageIcon.getIconHeight());getLayeredPane().add(imageLabel, new Integer(Integer.MIN_VALUE));label = new JLabel("无报警");label.setFont(new Font(null, Font.BOLD, 30));label.setForeground(new Color(91, 182, 91));label.setBounds(120, -60, 500, 200);label.setHorizontalAlignment(JLabel.CENTER);add(label);openBtn = new JButton("消音");openBtn.setBounds(295,320,144,60);openBtn.setBackground(new Color(255,255,255));openBtn.setFont(new Font("宋体", Font.BOLD,28));openBtn.setForeground(Color.red);//字体颜色openBtn.setRolloverEnabled(true);//更改鼠标移入按钮背景色一直不起作用
// openBtn.addMouseListener(new MouseAdapter() {
// @Override
// public void mouseEntered(MouseEvent e) {
// // 鼠标进入时设置悬浮颜色
// openBtn.setBackground(new Color(255,219,213 ));
// }
// @Override
// public void mouseExited(MouseEvent e) {
// // 鼠标离开时设置背景颜色
// openBtn.setBackground(new Color(255,255,255));
// }
// });openBtn.setVisible(false);add(openBtn);setVisible(true);QueryWrapper<Devicealarm> queryWrapper = new QueryWrapper<>();//未消音queryWrapper.eq("mute", 0);//未处理queryWrapper.eq("isprocessing", 0);// 定时器,对报警监听timer = new Timer(2000, new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {java.util.List<Devicealarm> devicealarms = devicealarmMapper.selectList(queryWrapper);if(devicealarms.size() > 0){//动态更改背景图重点,要先进行removegetLayeredPane().remove(imageLabel);label.setBounds(120, -30, 500, 200);label.setFont(new Font(null, Font.BOLD, 28));url = this.getClass().getResource("/music/alarm.gif");imageIcon = new ImageIcon(url); //添加图片imageLabel = new JLabel(imageIcon);imageLabel.setBounds(0, 0, imageIcon.getIconWidth(), imageIcon.getIconHeight());getLayeredPane().add(imageLabel, new Integer(Integer.MIN_VALUE));openBtn.setVisible(true);setVisible(true);setExtendedState(JFrame.NORMAL);toFront();java.util.List<String> messageArr = new ArrayList<>();java.util.List<String> idArr = new ArrayList<>();for(int i = 0; i < devicealarms.size(); i++){messageArr.add(devicealarms.get(i).getName() + "报警,浓度" + devicealarms.get(i).getValue() + "%LEL");idArr.add(devicealarms.get(i).getId());}String message = "<html>" + String.join("<br/>", messageArr) + "</html>";label.setText(message);label.setForeground(Color.RED);audioPlay.start();openBtn.addActionListener(it -> {//动态更改背景图重点,要先进行removegetLayeredPane().remove(imageLabel);url = this.getClass().getResource("/music/green.png");imageIcon = new ImageIcon(url); //添加图片imageLabel = new JLabel(imageIcon);imageLabel.setBounds(0, 0, imageIcon.getIconWidth(), imageIcon.getIconHeight());getLayeredPane().add(imageLabel, new Integer(Integer.MIN_VALUE));getLayeredPane().repaint();openBtn.setVisible(false);Devicealarm devicealarm = new Devicealarm();devicealarm.setMute(1);devicealarmMapper.update(devicealarm, new QueryWrapper<Devicealarm>().in("id", idArr));audioPlay.pause();label.setForeground(new Color(91, 182, 91));label.setBounds(120, -60, 500, 200);label.setText("<html>无报警</html>");});}}});// 启动定时器timer.start();}
}
其他工具类
@Component
public class SpringContextUtils implements ApplicationContextAware {/*** 上下文对象实例*/private static ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext = applicationContext;}/*** 获取applicationContext** @return*/public static ApplicationContext getApplicationContext() {return applicationContext;}/*** 通过name获取 Bean.** @param name* @return*/public static Object getBean(String name) {return getApplicationContext().getBean(name);}/*** 通过class获取Bean.** @param clazz* @param <T>* @return*/public static <T> T getBean(Class<T> clazz) {return getApplicationContext().getBean(clazz);}/*** 通过name,以及Clazz返回指定的Bean** @param name 标识名* @param clazz 类型对象* @param <T>* @return*/public static <T> T getBean(String name, Class<T> clazz) {return getApplicationContext().getBean(name, clazz);}
}
@Component
public class SpringContextUtils implements ApplicationContextAware {/*** 上下文对象实例*/private static ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext = applicationContext;}/*** 获取applicationContext** @return*/public static ApplicationContext getApplicationContext() {return applicationContext;}/*** 通过name获取 Bean.** @param name* @return*/public static Object getBean(String name) {return getApplicationContext().getBean(name);}/*** 通过class获取Bean.** @param clazz* @param <T>* @return*/public static <T> T getBean(Class<T> clazz) {return getApplicationContext().getBean(clazz);}/*** 通过name,以及Clazz返回指定的Bean** @param name 标识名* @param clazz 类型对象* @param <T>* @return*/public static <T> T getBean(String name, Class<T> clazz) {return getApplicationContext().getBean(name, clazz);}
}
相关文章:
springboot mybatis-plus swing实现报警监听
通过声音控制报警器,实现声光报警,使用beautyeye_lnf.jar美化界面如下 EnableTransactionManagement(proxyTargetClass true) SpringBootApplication EnableScheduling public class AlarmWarnApplication {public static void main(String[] args) …...
【计算机网络】网络层——详解IP协议
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】 本专栏旨在分享学习计算机网络的一点学习心得,欢迎大家在评论区交流讨论💌 目录 🐱一、I…...
【Java数据结构】03-二叉树,树和森林
4 二叉树、树和森林 重点章节,在选择,填空,综合中都有考察到。 4.1 掌握二叉树、树和森林的定义以及它们之间的异同点 1. 二叉树(Binary Tree) 定义: 二叉树是一种特殊的树结构,其中每个节点…...
Element UI Input组件内容格式化:换行时行首添加圆点
<el-input v-model"input"placeholder"请输入"type"textarea":rows"8"focus"handleFocus"input.native"handleInput" /> 解释一下: Element UI对 input 事件做了一层包装,无法返回…...
十、Qt 操作PDF文件
《一、QT的前世今生》 《二、QT下载、安装及问题解决(windows系统)》《三、Qt Creator使用》 《四、Qt 的第一个demo-CSDN博客》 《五、带登录窗体的demo》 《六、新建窗体时,几种窗体的区别》 《七、Qt 信号和槽》 《八、Qt C 毕业设计》 《九、Qt …...
开源软件合规风险与开源协议的法律效力
更多内容:OWASP TOP 10 之敏感数据泄露 OWASP TOP 10 之失效的访问控制 OWASP TOP 10 之失效的身份认证 一、开源软件主要合规风险 1、版权侵权风险 没有履行开源许可证规定的协议导致的版权侵权,例如没有按照许可要求的保留…...
2024全新开发API接口调用管理系统网站源码 附教程
2024全新开发API接口调用管理系统网站源码 附教程 用layui框架写的 个人感觉很简洁 方便使用和二次开发...
[Linux 进程(四)] 再谈环境变量,程序地址空间初识
文章目录 1、前言2、环境变量2.1 main函数第三个参数 -- 环境参数表2.2 本地环境变量和env中的环境变量2.3 配置文件与环境变量的全局性2.4 内建命令与常规命令2.5 环境变量相关的命令 3、程序地址空间 1、前言 上一篇我们讲了环境变量,如果有不明白的先读一下上一…...
【C++】STL(标准模板库)
文章目录 1. 基本概念2. 容器2.1. 容器的分类2.2. vector2.2.1. 构造vector对象2.2.2. vector的赋值 1. 基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称,现在已经成为C标准库的重要组成部分。STL的…...
【已解决】fatal: Authentication failed for ‘https://github.com/.../‘
文章目录 异常原因解决方法 异常原因 在 Linux 服务器上使用git push命令,输入用户名和密码之后,总会显示一个报错: fatal: Authentication failed for https://github.com/TianJiaQi-Code/Linux.git/ # 致命:无法通过验证访问起…...
SqlAlchemy使用教程(二) 入门示例及编程步骤
SqlAlchemy使用教程(一) 原理与环境搭建SqlAlchemy使用教程(三) CoreAPI访问与操作数据库详解 二、入门示例与基本编程步骤 在第一章中提到,Sqlalchemy提供了两套方法来访问数据库,由于Sqlalchemy 官方文档结构有些乱,对于ORM的使用步骤的描…...
HTML+JS+CSS移动端购物车选购界面
代码打包资源下载:【免费】HTMLJSCSS移动端购物车选购界面资源-CSDN文库 关键部分说明: UIGoods 类: 构造函数: 创建 UIGoods 实例时,传入商品数据 g,初始化商品的数据和选择数量。getTotalPrice() 方法…...
微服务治理:为什么要分析微服务的依赖关系?
在微服务架构中,单个服务相互协作以交付功能。这些协作会在服务之间形成依赖关系,其中一个服务依靠另一个服务来完成自己的任务。虽然依赖关系使功能得以实现,但不受控制的依赖关系可能会导致一系列挑战: 复杂性: 错综复杂的依赖…...
【程序员的自我修养—系统调用与API】
系统调用 背景: 为了避免有限的系统资源被多个不同的应用程序同时访问,需要加以保护,避免冲突;提供一套统一的接口,是应用程序能做一些由操作系统支持的行为;接口通过中断的方式实现,Linux使用…...
使用宝塔面板部署后端项目到服务器
文章目录 前言第一步:安装数据库第二步:打包后端项目第三步:配置数据库第四步:部署后端项目第五步:前后端联调测试总结 前言 在之前我已经写了一篇如何去部署前端项目,虽然能访问网站,但是没有…...
走迷宫(c语言)
前言: 制作一个迷宫游戏是一个有趣的编程挑战。首先,我们需要设计一个二维数组来表示迷宫的布局,其中每个元素代表迷宫中的一个格子。我们可以使用不同的值来表示空格、墙壁和起点/终点。接下来,我们需生成迷宫。在生成迷宫的过程…...
两周掌握Vue3(五):自定义指令、路由、ajax
文章目录 一、自定义指令1.创建和使用自定义指令2.钩子函数3.使用参数 二、路由1.创建一个router实例2.在components目录中创建组件3.将路由实例挂载到应用4.使用路由 三、Ajax 代码仓库:跳转 当前分支:05 一、自定义指令 自定义指令是Vue.js框架提供的…...
redis之单线程和多线程
目录 1、redis的发展史 2、redis为什么选择单线程? 3、主线程和Io线程是怎么协作完成请求处理的? 4、IO多路复用 5、开启redis多线程 1、redis的发展史 Redis4.0之前是用的单线程,4.0以后逐渐支持多线程 Redis4.0之前一直采用单线程的主…...
12AOP面向切面编程/GoF之代理模式
先看一个例子: 声明一个接口: // - * / 运算的标准接口! public interface Calculator {int add(int i, int j);int sub(int i, int j);int mul(int i, int j);int div(int i, int j); }实现该接口: package com.sunsplanter.prox…...
【MySQL】数据处理之增删改
文章目录 一、增加(插入)INSERT INTO...VALUES(...,...)VALUES的方式添加情况一:为表的所有字段按默认顺序插入数据情况二:为表的指定字段插入数据情况三:同时插入多条记录 将查询结果插入到表中 二、修改(…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...
麒麟系统使用-进行.NET开发
文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的,如果需要进行.NET开发,则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET,所以要进…...
