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;

    @Autowired
    private 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() {
            @Override
            public 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() {
            @Override
            public void actionPerformed(ActionEvent e) {
                java.util.List<Devicealarm> devicealarms = devicealarmMapper.selectList(queryWrapper);
                if(devicealarms.size() > 0){
                    //动态更改背景图重点,要先进行remove
                    getLayeredPane().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 -> {
                    	//动态更改背景图重点,要先进行remove
                        getLayeredPane().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;

    @Override
    public 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;

    @Override
    public 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);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/330163.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大数据毕业设计:基于python美食推荐系统+爬虫+Echarts可视化+协同过滤推荐算法+Django框架(源码)✅

毕业设计&#xff1a;2023-2024年计算机专业毕业设计选题汇总&#xff08;建议收藏&#xff09; 毕业设计&#xff1a;2023-2024年最新最全计算机专业毕设选题推荐汇总 &#x1f345;感兴趣的可以先收藏起来&#xff0c;点赞、关注不迷路&#xff0c;大家在毕设选题&#xff…

Net Core Ocelot+Consul实现网关、服务注册、服务发现

什么是Ocelot? Ocelot是一个开源的ASP.NET Core微服务网关&#xff0c;它提供了API网关所需的所有功能&#xff0c;如路由、认证、限流、监控等。 Ocelot是一个简单、灵活且功能强大的API网关&#xff0c;它可以与现有的服务集成&#xff0c;并帮助您保护、监控和扩展您的微…

【每周AI简讯】GPT-5将有指数级提升,GPT Store正式上线

AI7 - Chat中文版最强人工智能 OpenAI的CEO奥特曼表示GPT-5将有指数级提升 GPT奥特曼参加Y-Combinator W24启动会上表示&#xff0c;我们已经非常接近AGI。GPT-5将具有更好的推理能力、更高的准确性和视频支持。 GPT Store正式上线 OpenAI正式推出GPT store&#xff0c;目前…

Android车载系统Car模块架构链路分析

一、模块主要成员 CarServiceHelperService SystemServer 中专门为 AAOS 设立的系统服务&#xff0c;用来管理车机的核心服务 CarService。该系统服务的具体实现在 CarServiceHelperServiceUpdatableImpl CarService Car模块核心服务APP&#xff0c;Android 13版本开始分为…

Java-NIO 开篇(1)

NIO简介 高性能的Java通信&#xff0c;离不开Java NIO组件&#xff0c;现在主流的技术框架或中间件服务器&#xff0c;都使用了Java NIO组件&#xff0c;譬如Tomcat、 Jetty、 Netty、Redis、RabbitMQ等的网络通信模块。在1.4版本之前&#xff0c; Java IO类库是阻塞式IO&…

0间隔24h采集线报+源码的资源网

一款网站程序零间隔24h采集线报源码的资源网&#xff0c;更新下载类目的采集 及 导入&#xff0c;这款网站程序&#xff1a;jizhiCMS 高仿新版某刀资源网模板进行自动采集。 安装方法&#xff1a; 将根目录文件上传服务器 将根目录文件的sql.sql导入mysql数据库 环境需要支…

springmvc上传与下载

文件上传 结构图 导入依赖 <dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>org.springframework</groupId><artifactId…

Golang 搭建 WebSocket 应用(二) - 基本群聊 demo

上一篇文章中&#xff0c;我们已经了解了 gorilla/websocket 的一些基本概念和简单的用法。 接下来&#xff0c;我们通过一个再复杂一点的例子来了解它的实际用法。 功能 这个例子来自源码里面的 examples/chat&#xff0c;它包含了以下功能&#xff1a; 用户访问群聊页面的…

基于JavaSocket重写Dubbo网络传输层

前言 我们知道&#xff0c;位于 Serialize 层上面的是负责网络传输的 Transport 层&#xff0c;它负责调用编解码器 Codec2 把要传输的对象编码后传输、再对接收到的字节序列解码。 站在客户端的角度&#xff0c;一次 RPC 调用的流程大概是这样的&#xff1a; Invoker 发起 …

JMeter请求参数Parameters,带中文或特殊字符(+/=)时,例如登录密码或者token等,需要勾选编码

以前的登录接口密码参数不包含特殊字符&#xff0c;为了安全&#xff0c;产品今天修改了需求&#xff0c;密码必须由数字&#xff0c;字母和特殊字符构成&#xff0c;之前利用JMeter接口编写的脚本报错了&#xff0c;调整了一下&#xff0c;里面踩了一点坑&#xff0c;记录下来…

AM5-DB低压备自投装置在河北冠益荣信科技公司洞庭变电站工程中的应用

摘 要&#xff1a;随着电力需求的不断增加&#xff0c;电力系统供电可靠性要求越来越高&#xff0c;许多供电系统已具备两回或多回供电线路。备用电源自动投入装置可以有效提高供电的可靠性&#xff0c;该类装置能够在工作电源因故障断开后&#xff0c;自动且迅速地将备用电源投…

SpringMVC JSON数据处理见解6

6.JSON数据处理 6.1.添加json依赖 springmvc 默认使用jackson作为json类库,不需要修改applicationContext-servlet.xml任何配置&#xff0c;只需引入以下类库springmvc就可以处理json数据&#xff1a; <!--spring-json依赖--> <dependency><groupId>com.f…

react umi/max 封装页签组件

1. models/tabs // 全局共享数据示例 import { useState } from react;const useUser () > {const [items, setItems] useState<any[]>([]); // 页签的全局Item数据const [key, setKey] useState<string>(/home); // 页签的高亮Keyreturn {items,setItems…

Alinx ZYNQ 7020 LED调试--in RAM

设置拨码开关为JTAG方式 烧写LED bit stream a. 点击“Program device”烧录程序到FPGA中&#xff08;重新上电程序就丢失了&#xff09; b. /01_led/led.runs/impl_1/led.bit 程序烧录到Flash中 ZYNQ与以往的直接烧录Flash不同&#xff0c;首先必须PS&#xff0c;然后烧…

C语言总结十二:文件操作详细总结

在操作系统中&#xff0c;为了统一对各种硬件的操作&#xff0c;简化接口&#xff0c;不同的硬件设备也都被看成一个文件。对这些文件的操作&#xff0c;等同于对磁盘上普通文件的操作。我们不去探讨硬件设备是如何被映射成文件的&#xff0c;把任意 I/O 设备&#xff0c;转换成…

边缘计算AI智能分析网关V4客流统计算法的概述

客流量统计AI算法是一种基于人工智能技术的数据分析方法&#xff0c;通过机器学习、深度学习等算法&#xff0c;实现对客流量的实时监测和统计。该算法主要基于机器学习和计算机视觉技术&#xff0c;其基本流程包括图像采集、图像预处理、目标检测、目标跟踪和客流量统计等步骤…

HTML快速上手

前腰&#xff1a;本文只是概括重要的 html 标签&#xff0c;这些标签的使用频率较高&#xff0c;更多标签相关的资源您可以跳转 Mmdn 进行深入的学习。 1.HTML 基础 就其核心而言&#xff0c;HTML 是一种相当简单的、由不同 元素 组成的标记语言&#xff0c;它可以被应用于文本…

一款基于Frida的Android- SO动态库逆向命令行工具

前言 YJ是一款基于Frida框架的款Native层逆向分析的交互式工具&#xff0c;就像在GUN-LINUX上使用GDB工具一样&#xff0c;设计YJ的灵感来自GNU-GDB调试工具&#xff0c;它通过交互命令模式轻松地向展示你想要窥探的内存数据 Frida是一个底层hook工具及框架。提供了hook工具的…

防火墙如何处理nat(私网用户访问Internet场景)

目录 私网用户访问Internet场景源NAT的两种转换方式NAT No-PAT NAPT配置思路规划 NAPT配置命令配置接口IP地址并将接口加入相应安全区域配置安全策略配置NAT地址池配置源NAT策略配置缺省路由配置黑洞路由 私网用户访问Internet场景 多个用户共享少量公网地址访问Internet的时候…

CAN记录仪在矿卡中的应用

CAN数据记录仪在矿卡中主要用于记录和监控车辆的运行数据&#xff0c;以保障安全和提高运营效率。那么就需要记录整车数据来进行车辆诊断分析&#xff0c;查找问题解决问题。 CAN数据记录仪可以记录矿卡的各种运行参数&#xff0c;如发动机转速、车速、制动状态、转向状态、油…