当前位置: 首页 > news >正文

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实现报警监听

通过声音控制报警器&#xff0c;实现声光报警&#xff0c;使用beautyeye_lnf.jar美化界面如下 EnableTransactionManagement(proxyTargetClass true) SpringBootApplication EnableScheduling public class AlarmWarnApplication {public static void main(String[] args) …...

【计算机网络】网络层——详解IP协议

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】 本专栏旨在分享学习计算机网络的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 &#x1f431;一、I…...

【Java数据结构】03-二叉树,树和森林

4 二叉树、树和森林 重点章节&#xff0c;在选择&#xff0c;填空&#xff0c;综合中都有考察到。 4.1 掌握二叉树、树和森林的定义以及它们之间的异同点 1. 二叉树&#xff08;Binary Tree&#xff09; 定义&#xff1a; 二叉树是一种特殊的树结构&#xff0c;其中每个节点…...

Element UI Input组件内容格式化:换行时行首添加圆点

<el-input v-model"input"placeholder"请输入"type"textarea":rows"8"focus"handleFocus"input.native"handleInput" /> 解释一下&#xff1a; Element UI对 input 事件做了一层包装&#xff0c;无法返回…...

十、Qt 操作PDF文件

《一、QT的前世今生》 《二、QT下载、安装及问题解决(windows系统)》《三、Qt Creator使用》 ​​​ 《四、Qt 的第一个demo-CSDN博客》 《五、带登录窗体的demo》 《六、新建窗体时&#xff0c;几种窗体的区别》 《七、Qt 信号和槽》 《八、Qt C 毕业设计》 《九、Qt …...

开源软件合规风险与开源协议的法律效力

更多内容&#xff1a;​​​​​​OWASP TOP 10 之敏感数据泄露 OWASP TOP 10 之失效的访问控制 ​​​​​​OWASP TOP 10 之失效的身份认证 一、开源软件主要合规风险 1、版权侵权风险 没有履行开源许可证规定的协议导致的版权侵权&#xff0c;例如没有按照许可要求的保留…...

2024全新开发API接口调用管理系统网站源码 附教程

2024全新开发API接口调用管理系统网站源码 附教程 用layui框架写的 个人感觉很简洁 方便使用和二次开发...

[Linux 进程(四)] 再谈环境变量,程序地址空间初识

文章目录 1、前言2、环境变量2.1 main函数第三个参数 -- 环境参数表2.2 本地环境变量和env中的环境变量2.3 配置文件与环境变量的全局性2.4 内建命令与常规命令2.5 环境变量相关的命令 3、程序地址空间 1、前言 上一篇我们讲了环境变量&#xff0c;如果有不明白的先读一下上一…...

【C++】STL(标准模板库)

文章目录 1. 基本概念2. 容器2.1. 容器的分类2.2. vector2.2.1. 构造vector对象2.2.2. vector的赋值 1. 基本概念 STL&#xff08;Standard Template Library&#xff0c;标准模板库)是惠普实验室开发的一系列软件的统称&#xff0c;现在已经成为C标准库的重要组成部分。STL的…...

【已解决】fatal: Authentication failed for ‘https://github.com/.../‘

文章目录 异常原因解决方法 异常原因 在 Linux 服务器上使用git push命令&#xff0c;输入用户名和密码之后&#xff0c;总会显示一个报错&#xff1a; fatal: Authentication failed for https://github.com/TianJiaQi-Code/Linux.git/ # 致命&#xff1a;无法通过验证访问起…...

SqlAlchemy使用教程(二) 入门示例及编程步骤

SqlAlchemy使用教程(一) 原理与环境搭建SqlAlchemy使用教程(三) CoreAPI访问与操作数据库详解 二、入门示例与基本编程步骤 在第一章中提到&#xff0c;Sqlalchemy提供了两套方法来访问数据库&#xff0c;由于Sqlalchemy 官方文档结构有些乱&#xff0c;对于ORM的使用步骤的描…...

HTML+JS+CSS移动端购物车选购界面

代码打包资源下载&#xff1a;【免费】HTMLJSCSS移动端购物车选购界面资源-CSDN文库 关键部分说明&#xff1a; UIGoods 类&#xff1a; 构造函数&#xff1a; 创建 UIGoods 实例时&#xff0c;传入商品数据 g&#xff0c;初始化商品的数据和选择数量。getTotalPrice() 方法…...

微服务治理:为什么要分析微服务的依赖关系?

在微服务架构中&#xff0c;单个服务相互协作以交付功能。这些协作会在服务之间形成依赖关系&#xff0c;其中一个服务依靠另一个服务来完成自己的任务。虽然依赖关系使功能得以实现&#xff0c;但不受控制的依赖关系可能会导致一系列挑战&#xff1a; 复杂性: 错综复杂的依赖…...

【程序员的自我修养—系统调用与API】

系统调用 背景&#xff1a; 为了避免有限的系统资源被多个不同的应用程序同时访问&#xff0c;需要加以保护&#xff0c;避免冲突&#xff1b;提供一套统一的接口&#xff0c;是应用程序能做一些由操作系统支持的行为&#xff1b;接口通过中断的方式实现&#xff0c;Linux使用…...

使用宝塔面板部署后端项目到服务器

文章目录 前言第一步&#xff1a;安装数据库第二步&#xff1a;打包后端项目第三步&#xff1a;配置数据库第四步&#xff1a;部署后端项目第五步&#xff1a;前后端联调测试总结 前言 在之前我已经写了一篇如何去部署前端项目&#xff0c;虽然能访问网站&#xff0c;但是没有…...

走迷宫(c语言)

前言&#xff1a; 制作一个迷宫游戏是一个有趣的编程挑战。首先&#xff0c;我们需要设计一个二维数组来表示迷宫的布局&#xff0c;其中每个元素代表迷宫中的一个格子。我们可以使用不同的值来表示空格、墙壁和起点/终点。接下来&#xff0c;我们需生成迷宫。在生成迷宫的过程…...

两周掌握Vue3(五):自定义指令、路由、ajax

文章目录 一、自定义指令1.创建和使用自定义指令2.钩子函数3.使用参数 二、路由1.创建一个router实例2.在components目录中创建组件3.将路由实例挂载到应用4.使用路由 三、Ajax 代码仓库&#xff1a;跳转 当前分支&#xff1a;05 一、自定义指令 自定义指令是Vue.js框架提供的…...

redis之单线程和多线程

目录 1、redis的发展史 2、redis为什么选择单线程&#xff1f; 3、主线程和Io线程是怎么协作完成请求处理的&#xff1f; 4、IO多路复用 5、开启redis多线程 1、redis的发展史 Redis4.0之前是用的单线程&#xff0c;4.0以后逐渐支持多线程 Redis4.0之前一直采用单线程的主…...

12AOP面向切面编程/GoF之代理模式

先看一个例子&#xff1a; 声明一个接口&#xff1a; // - * / 运算的标准接口! 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); }实现该接口&#xff1a; package com.sunsplanter.prox…...

【MySQL】数据处理之增删改

文章目录 一、增加&#xff08;插入&#xff09;INSERT INTO...VALUES(...,...)VALUES的方式添加情况一&#xff1a;为表的所有字段按默认顺序插入数据情况二&#xff1a;为表的指定字段插入数据情况三&#xff1a;同时插入多条记录 将查询结果插入到表中 二、修改&#xff08;…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...