- swing窗体打jar包后找不到图片的问题
zoyation
javajarswingclassloaderimageeclipsejava
今天打jar包遇到一个怪问题:打成jar包后双击运行没反应cmd运行有反应但出现下列问题Causedby:java.lang.ExceptionInInitializerErroratcom.zou.ui.MyDialog.init(MyDialog.java:92)atcom.zou.ui.MyDialog.(MyDialog.java:45)atcom.zou.ui.LoginDialog.(
- 【解决内存泄漏的问题】 Qt 框架中的父子对象关系会自动管理内存,父对象会在其销毁时自动销毁所有子对象。
课堂随想
QTqt
修改前的代码这段代码可能会出现内存泄漏问题,主要原因是构造函数中创建的LoginDialog和RegisterDialog对象未在合适的地方被正确释放。具体分析如下:1.构造函数中的问题_login_dlg=newLoginDialog();setCentralWidget(_login_dlg);_login_dlg->show();connect(_login_dlg,&LoginDialog
- vue 两个弹窗时出现,打开第二个弹窗 是灰色的,再点击才是正常
光影3415
vue.jsjavascript前端
如果你使用的是ElementUI,el-dialog组件有一个append-to-body属性,这个属性可以将弹窗的DOM直接挂载到body标签上,这样可以避免一些层级嵌套问题:
- Android Dialog圆角设置无效的问题
ly969434341
android
一,参考AndroidDialog圆角设置无效的问题https://blog.csdn.net/woshi_awei/article/details/99664527Android自定义Dialog实现通用圆角对话框https://cloud.tencent.com/developer/article/1740956二,原因Diallog的默认背景是白色(直角背景),我自定义的Dialog背景也是
- el-dialog高度设置
夏之小星星
前端vue.jselementuicss
el-dialog高度设置::v-deep.el-dialog{height:78vh;overflow:auto;}
- Vue中el-dialog的用法
「已注销」
Vue模板开发vue.js
1、写入页面打开嵌套表单的Dialog取消确定2、写入变量dialogFormVisible:
- 【前端】解决element-ui两层dialog嵌套,遮罩层消失的问题。
道着无为法自然
前端ui
背景总觉得element-uidialog的遮罩层逻辑有点晦涩,当一个dialog内嵌另一个dialog时,它的遮罩层却始终只有一个,也就是下方class="v-modal"的div。可以看到,v-modal的层级总是比dialog低一层。问题当两层dialog为直接父子关系时,我们可以简单的使用其属性append-to-body,modal-append-to-body来解决问题:如,第二层di
- vue el-dialog嵌套解决无法点击问题
javachen__
vue.jselementui
产生原因:当你在el-dialog上嵌套另一个el-dialog窗口时,可能会遇到内部对话框无法点击的问题。这通常是由于嵌套对话框的遮罩层(overlay)或其他样式问题造成的。解决方案:如果你的el-dialog组件支持append-to-body属性,你可以将对话框附加到body元素上,以避免z-index问题。外层对话框内层对话框
- 全面的弹出框提示框插件资源指南
BOBO爱吃菠萝
本文还有配套的精品资源,点击获取简介:在IT领域,用户界面设计中的弹出框和提示框是关键元素,它们能够有效传达信息与引导用户。本资源汇集了多种类型的弹出框和提示框插件,如artDialog、ymprompt4.0、thickbox、poshytip和colortips,提供给开发者在网页或应用程序中实现多样化交互体验的工具。这些插件各有特色,包括自定义样式、拖拽功能、全屏展示、定位提示以及色彩展示等
- Android Compose UI (二) 常规MVI操作
CreeLu
androidui
文章目录1.概述2.MVI的变化概括3.ViewModel的变化4.Activity/Fragment/View的变化5.Toast/Dialog/底部提示等临时UI状态6.总结1.概述随着Android应用不断的演化,从最开始的MVC->MVP->MVVM,现在Google官方也有了MVI的示例,相比较MVVM来说有了一些变化,接下来跟着文章一起了解.(其实这篇文章主要是介绍MVI的,和Comp
- 使用AlertDialog实现提示框
晨曦诗雨
image.png自己写一个提示消息的框xml文件java的实现功能publicclassAlertDialogextendsAppCompatActivityimplementsView.OnClickListener{privateButtonbutton1;privateButtonbutton2;NotificationManagernotificationManager;//通知控制列i
- 06_Qt对话框QDialog
夏玉林的学习之路
Qt基础知识qt
Qt对话框QDialog基本概念标准对话框自定义消息框模态对话框非模态对话框消息对话框标准文件对话框代码基本概念对话框是GUI程序中不可或缺的组成部分。很多不能或者不适合放入主窗口的功能组件都必须放在对话框中设置。对话框通常会是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。Qt中使用QDialog类实现对话框。就像主窗口一样,我们通常会设计一个类继承QDialog。QDial
- qt 表格中插入一行_Qt在表格中加入控件
唉唉唉哒
qt表格中插入一行
任务:使用QTableWidget动态生成表格,在每行的某两列中加入QComboBox下拉框控件和QPushButton按钮控件有添加,删除,编辑功能,每行的按钮可以浏览文件夹并选择文件1、新建一个对话框QDialog,设计界面中选择Item-Widgets里的TableWidget,添加该控件,命名为tableWidget_userlist2、在Dialog的构造函数中初始化表格的一些参数//初
- web页面自适应QWebEngineView的大小
吃面不喝汤66
前端
#ifndefOPENVIPDIALOG_H#defineOPENVIPDIALOG_H#include#include"draggabledialog.h"#includenamespaceUi{classOpenVipDialog;}classOpenVipDialog:publicDraggableDialog{Q_OBJECTpublic:explicitOpenVipDialog(QWi
- Javaweb项目-调用接口-如何在服务器端跳转网页后显示并弹出对话框代码
海海不掉头发
Java面试习题Java基础java
Webapp项目中在java包下新建一个服务端类使用JOptionPane框架组件调用showMessageDialog的方法实现四个参数null,"这是一个信息对话框","信息",JOptionPane.INFORMATION_MESSAGE还有确认对话框的代码showConfirmDialogpackageservlet;importjavafx.scene.control.Alert;imp
- 在线预览PDF和图片
oyxm____
pdfvue.jsjavascript
项目中遇到一个需要在线预览pdf以及图片功能,在网上找了很多插件发现都达不到理想需求,所有自己通过iframe标签自己封装了一个内嵌pdf页面通过判断当前文件流的后缀名来区分是pdf还是图片或者是其他类文档组件如下,需要的自取直接可用-->-->下载图片关闭import{online}from'@/api/system/user.js'exportdefault{props:{pdfDialog:
- python的GUI
for_choc
Python
由于在Python3.x上安装wx失败所以最后使用Tkinter实现,python2.x在这个模块上还是有挺多的区别的。创建并运行GUI程序的基本步骤:1.导入tkinter模块(Python3.x)结合2,我导入了部分需要的子模块fromtkinterimportTk,Button,Frame,Label,Entry,filedialog,2.创建一个顶层窗口对象需要一个放置所有组件的地方top
- 1.2 【python】tkinter一个有趣的小项目
手机电脑789
pythonpython
#tk常见的消息框fromtkinter.commondialogimportDialog#图标ERROR="error"INFO="info"QUESTION="question"WARNING="warning"ABORTRETRYIGNORE="abortretryignore"OK="ok"OKCANCEL="okcancel"RETRYCANCEL="retrycancel"YESNO=
- [Electron]中的dialog模块
嗓子疼谁心疼
Electron前端javascriptelectron
Electron的dialog模块dialog模块具有以下方法:dialog.showOpenDialogSync([browserWindow,]options)同步打开文件对话框*browserWindowBrowserWindow(可选)*options *titlestring(可选)-对话框窗口的标题 *defaultPathstring(可选)-对话框的默认展示路径 *buttonLa
- 纯血鸿蒙APP实战开发——评论组件案例实现
「已注销」
harmonyOS鸿蒙开发移动开发harmonyos前端界面布局移动开发ui
介绍评论组件在目前市面上的短视频app中是一种很常见的场景,本案例使用【全局状态保留能力弹窗】来实现评论组件。点击评论按钮弹出评论组件,点击空白处隐藏该组件,再次点击评论按钮则会恢复上一次浏览的组件状态。效果图预览使用说明点击评论按钮打开评论组件。上下滑动可以浏览评论。点击空白处或者关闭按钮可以关闭评论组件。再次点击评论按钮则恢复上一次浏览评论位置。实现思路使用GlobalStateDialogM
- python界面开发 - filedialog 文件选择对话框
牛魔王的小怪兽
pythonpython前端
文章目录1.Tkinter开发2.filedialog文件选择对话框3.python图形界面开发3.1.Python图形界面开发——Tkinter3.2.Python图形界面开发——PyQt3.3.Python图形界面开发——wxPython3.4.Python图形界面开发——PyGTK:基于GTK3.5.Python图形界面开发——Kivy3.6.Python图形界面开发——可视化工具3.7.P
- Python之Tkinter包的filedialog模块介绍
学习&实践爱好者
Python学习python
Python之Tkinter包的filedialog模块介绍在程序运行该过程中,当你需要手动选择文件或手动选择文件存储路径时,就需要用到tkinter库中filedialog提供的函数。tkinter的filedialog模块提供了一个简单的对话框界面,用于让用户选择文件或目录。它通常与tkinter一起使用,用于创建图形用户界面(GUI)应用程序。Tkinter库是python默认的GUI库,它
- 实现点击 `el-dialog` 里面的一个图标将对话框放大至全屏
昕er
vue.jselementui前端
实现点击el-dialog里面的一个图标将对话框放大至全屏,你可以使用JavaScript使el-dialog的样式覆盖整个窗口。为此,我们可以添加一个图标按钮,点击时将对话框设置为全屏显示,再次点击时恢复其原始大小。实现步骤添加全屏切换按钮:在el-dialog内部添加一个图标按钮,用于切换全屏模式。切换全屏状态的方法:实现一个方法来切换对话框的全屏状态。更新样式:通过操作样式使对话框在全屏和正
- 信号槽、父子关系、隐式共享
行者..................
qt
1.Qt基础-connect(…):连接了"OK"按钮至QDialog的accept槽函数,以及"Cancel"按钮至QDialog的reject槽函数。根据结果判断按下的是"OK"按钮还是"Cancel"按钮。-parent-child机制:当建立一个物件时,若有parent,则parent将此物件加入其childrenlist。消除parent时,会根据childrenlist消除这些chil
- QT学习——day7
流光拾贝
qtc++
QT学习——day7对话框界面对话框界面的模态显示TestDialog*dlg=newTestDialog(this);////Dialog窗口不能依附父窗口实现,只能单独显示////模态,exec()阻塞程序的执行,进行模态显示dlg->exec();对话框模态显示的关闭对话框的模态显示需调用函数.exec(),该函数的返回值为int类型。1.第一种模态对话框的关闭(隐藏)方式:ACCepted
- Android PopupWindow 和 Dialog Activity的使用
lq_ios
PopupWindow(悬浮框)Android中的PopupWindow类似iOS中的UIPopoverPresentationController弹窗,可以显示在某个view的附近,相对于AlertDialog,AlertDialog在位置显示上是固定的(默认是居中,当然也可以通过dialog.window?.attributes中的x,y改变位置),而PopupWindow则相对比较随意,可以
- Qt 计算圆面积
碳碳贰键
上面是creator的ui界面从左到右从上之下的命名m_pEnterLabelm_pEnterLineEditm_pShowLabelm_pShowLineEditm_pCaculatePushButton.h#ifndefDIALOG_H#defineDIALOG_H#includenamespaceUi{classDialog;}classDialog:publicQDialog{Q_OBJE
- element el-dialog 滚动条问题
前端小趴菜05
vue.js前端javascript
elementUI在打开dialog的时,页面右侧会出现滚动条,或是页面宽度会缩小,当关闭dialog后又恢复原样,控制台检查后发现当打开dialog时,body元素会有class=el-popup-parent--hidden的类名,关闭dialog后el-popup-parent--hidden类名消失,这应该就是造成页面出现滚动条或是宽度缩小的原因,查了一下资料发现有两种解决办法一.重写el
- 前端echarts地图3D效果+点击地域出现弹出框可以有确定取消操作
小小红色无花果
echartsecharts前端javascript
效果图如下:代码如下:点击的弹框内容Content{{area}}取消确定import*asechartsfrom"echarts";importjiangsufrom"../assets/jiangsu.js";import"echarts-gl";exportdefault{data(){return{centerDialogVisible:false,};},mounted(){this.i
- MFC Dialog vtk
爱学习的大牛123
vtk学习MFCCDialogvtk
使用MFC(MicrosoftFoundationClasses)和VTK(VisualizationToolkit)的对话框应用程序。这个例子将展示如何在MFC对话框中嵌入VTK渲染窗口。首先,我们需要创建一个MFC对话框应用程序,然后将VTK集成到其中。以下是实现步骤:1.创建MFC对话框应用程序2.在对话框中添加VTK渲染窗口3.实现简单的VTK场景让我们从头文件开始:```#pragmao
- jQuery 键盘事件keydown ,keypress ,keyup介绍
107x
jsjquerykeydownkeypresskeyup
本文章总结了下些关于jQuery 键盘事件keydown ,keypress ,keyup介绍,有需要了解的朋友可参考。
一、首先需要知道的是: 1、keydown() keydown事件会在键盘按下时触发. 2、keyup() 代码如下 复制代码
$('input').keyup(funciton(){  
- AngularJS中的Promise
bijian1013
JavaScriptAngularJSPromise
一.Promise
Promise是一个接口,它用来处理的对象具有这样的特点:在未来某一时刻(主要是异步调用)会从服务端返回或者被填充属性。其核心是,promise是一个带有then()函数的对象。
为了展示它的优点,下面来看一个例子,其中需要获取用户当前的配置文件:
var cu
- c++ 用数组实现栈类
CrazyMizzz
数据结构C++
#include<iostream>
#include<cassert>
using namespace std;
template<class T, int SIZE = 50>
class Stack{
private:
T list[SIZE];//数组存放栈的元素
int top;//栈顶位置
public:
Stack(
- java和c语言的雷同
麦田的设计者
java递归scaner
软件启动时的初始化代码,加载用户信息2015年5月27号
从头学java二
1、语言的三种基本结构:顺序、选择、循环。废话不多说,需要指出一下几点:
a、return语句的功能除了作为函数返回值以外,还起到结束本函数的功能,return后的语句
不会再继续执行。
b、for循环相比于whi
- LINUX环境并发服务器的三种实现模型
被触发
linux
服务器设计技术有很多,按使用的协议来分有TCP服务器和UDP服务器。按处理方式来分有循环服务器和并发服务器。
1 循环服务器与并发服务器模型
在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求,对服务端的程序就提出了特殊的要求。
目前最常用的服务器模型有:
·循环服务器:服务器在同一时刻只能响应一个客户端的请求
·并发服务器:服
- Oracle数据库查询指令
肆无忌惮_
oracle数据库
20140920
单表查询
-- 查询************************************************************************************************************
-- 使用scott用户登录
-- 查看emp表
desc emp
- ext右下角浮动窗口
知了ing
JavaScriptext
第一种
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/
- 浅谈REDIS数据库的键值设计
矮蛋蛋
redis
http://www.cnblogs.com/aidandan/
原文地址:http://www.hoterran.info/redis_kv_design
丰富的数据结构使得redis的设计非常的有趣。不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与。redis的DBA需要熟悉数据结构,并能了解使用场景。
- maven编译可执行jar包
alleni123
maven
http://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven
<build>
<plugins>
<plugin>
<artifactId>maven-asse
- 人力资源在现代企业中的作用
百合不是茶
HR 企业管理
//人力资源在在企业中的作用人力资源为什么会存在,人力资源究竟是干什么的 人力资源管理是对管理模式一次大的创新,人力资源兴起的原因有以下点: 工业时代的国际化竞争,现代市场的风险管控等等。所以人力资源 在现代经济竞争中的优势明显的存在,人力资源在集团类公司中存在着 明显的优势(鸿海集团),有一次笔者亲自去体验过红海集团的招聘,只 知道人力资源是管理企业招聘的 当时我被招聘上了,当时给我们培训 的人
- Linux自启动设置详解
bijian1013
linux
linux有自己一套完整的启动体系,抓住了linux启动的脉络,linux的启动过程将不再神秘。
阅读之前建议先看一下附图。
本文中假设inittab中设置的init tree为:
/etc/rc.d/rc0.d
/etc/rc.d/rc1.d
/etc/rc.d/rc2.d
/etc/rc.d/rc3.d
/etc/rc.d/rc4.d
/etc/rc.d/rc5.d
/etc
- Spring Aop Schema实现
bijian1013
javaspringAOP
本例使用的是Spring2.5
1.Aop配置文件spring-aop.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmln
- 【Gson七】Gson预定义类型适配器
bit1129
gson
Gson提供了丰富的预定义类型适配器,在对象和JSON串之间进行序列化和反序列化时,指定对象和字符串之间的转换方式,
DateTypeAdapter
public final class DateTypeAdapter extends TypeAdapter<Date> {
public static final TypeAdapterFacto
- 【Spark八十八】Spark Streaming累加器操作(updateStateByKey)
bit1129
update
在实时计算的实际应用中,有时除了需要关心一个时间间隔内的数据,有时还可能会对整个实时计算的所有时间间隔内产生的相关数据进行统计。
比如: 对Nginx的access.log实时监控请求404时,有时除了需要统计某个时间间隔内出现的次数,有时还需要统计一整天出现了多少次404,也就是说404监控横跨多个时间间隔。
Spark Streaming的解决方案是累加器,工作原理是,定义
- linux系统下通过shell脚本快速找到哪个进程在写文件
ronin47
一个文件正在被进程写 我想查看这个进程 文件一直在增大 找不到谁在写 使用lsof也没找到
这个问题挺有普遍性的,解决方法应该很多,这里我给大家提个比较直观的方法。
linux下每个文件都会在某个块设备上存放,当然也都有相应的inode, 那么透过vfs.write我们就可以知道谁在不停的写入特定的设备上的inode。
幸运的是systemtap的安装包里带了inodewatch.stp,位
- java-两种方法求第一个最长的可重复子串
bylijinnan
java算法
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class MaxPrefix {
public static void main(String[] args) {
String str="abbdabcdabcx";
- Netty源码学习-ServerBootstrap启动及事件处理过程
bylijinnan
javanetty
Netty是采用了Reactor模式的多线程版本,建议先看下面这篇文章了解一下Reactor模式:
http://bylijinnan.iteye.com/blog/1992325
Netty的启动及事件处理的流程,基本上是按照上面这篇文章来走的
文章里面提到的操作,每一步都能在Netty里面找到对应的代码
其中Reactor里面的Acceptor就对应Netty的ServerBo
- servelt filter listener 的生命周期
cngolon
filterlistenerservelt生命周期
1. servlet 当第一次请求一个servlet资源时,servlet容器创建这个servlet实例,并调用他的 init(ServletConfig config)做一些初始化的工作,然后调用它的service方法处理请求。当第二次请求这个servlet资源时,servlet容器就不在创建实例,而是直接调用它的service方法处理请求,也就是说
- jmpopups获取input元素值
ctrain
JavaScript
jmpopups 获取弹出层form表单
首先,我有一个div,里面包含了一个表单,默认是隐藏的,使用jmpopups时,会弹出这个隐藏的div,其实jmpopups是将我们的代码生成一份拷贝。
当我直接获取这个form表单中的文本框时,使用方法:$('#form input[name=test1]').val();这样是获取不到的。
我们必须到jmpopups生成的代码中去查找这个值,$(
- vi查找替换命令详解
daizj
linux正则表达式替换查找vim
一、查找
查找命令
/pattern<Enter> :向下查找pattern匹配字符串
?pattern<Enter>:向上查找pattern匹配字符串
使用了查找命令之后,使用如下两个键快速查找:
n:按照同一方向继续查找
N:按照反方向查找
字符串匹配
pattern是需要匹配的字符串,例如:
1: /abc<En
- 对网站中的js,css文件进行打包
dcj3sjt126com
PHP打包
一,为什么要用smarty进行打包
apache中也有给js,css这样的静态文件进行打包压缩的模块,但是本文所说的不是以这种方式进行的打包,而是和smarty结合的方式来把网站中的js,css文件进行打包。
为什么要进行打包呢,主要目的是为了合理的管理自己的代码 。现在有好多网站,你查看一下网站的源码的话,你会发现网站的头部有大量的JS文件和CSS文件,网站的尾部也有可能有大量的J
- php Yii: 出现undefined offset 或者 undefined index解决方案
dcj3sjt126com
undefined
在开发Yii 时,在程序中定义了如下方式:
if($this->menuoption[2] === 'test'),那么在运行程序时会报:undefined offset:2,这样的错误主要是由于php.ini 里的错误等级太高了,在windows下错误等级
- linux 文件格式(1) sed工具
eksliang
linuxlinux sed工具sed工具linux sed详解
转载请出自出处:
http://eksliang.iteye.com/blog/2106082
简介
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾
- Android应用程序获取系统权限
gqdy365
android
引用
如何使Android应用程序获取系统权限
第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:
1. 在应用程序的AndroidManifest.xml中的manifest节点
- HoverTree开发日志之验证码
hvt
.netC#asp.nethovertreewebform
HoverTree是一个ASP.NET的开源CMS,目前包含文章系统,图库和留言板功能。代码完全开放,文章内容页生成了静态的HTM页面,留言板提供留言审核功能,文章可以发布HTML源代码,图片上传同时生成高品质缩略图。推出之后得到许多网友的支持,再此表示感谢!留言板不断收到许多有益留言,但同时也有不少广告,因此决定在提交留言页面增加验证码功能。ASP.NET验证码在网上找,如果不是很多,就是特别多
- JSON API:用 JSON 构建 API 的标准指南中文版
justjavac
json
译文地址:https://github.com/justjavac/json-api-zh_CN
如果你和你的团队曾经争论过使用什么方式构建合理 JSON 响应格式, 那么 JSON API 就是你的 anti-bikeshedding 武器。
通过遵循共同的约定,可以提高开发效率,利用更普遍的工具,可以是你更加专注于开发重点:你的程序。
基于 JSON API 的客户端还能够充分利用缓存,
- 数据结构随记_2
lx.asymmetric
数据结构笔记
第三章 栈与队列
一.简答题
1. 在一个循环队列中,队首指针指向队首元素的 前一个 位置。
2.在具有n个单元的循环队列中,队满时共有 n-1 个元素。
3. 向栈中压入元素的操作是先 移动栈顶指针&n
- Linux下的监控工具dstat
网络接口
linux
1) 工具说明dstat是一个用来替换 vmstat,iostat netstat,nfsstat和ifstat这些命令的工具, 是一个全能系统信息统计工具. 与sysstat相比, dstat拥有一个彩色的界面, 在手动观察性能状况时, 数据比较显眼容易观察; 而且dstat支持即时刷新, 譬如输入dstat 3, 即每三秒收集一次, 但最新的数据都会每秒刷新显示. 和sysstat相同的是,
- C 语言初级入门--二维数组和指针
1140566087
二维数组c/c++指针
/*
二维数组的定义和二维数组元素的引用
二维数组的定义:
当数组中的每个元素带有两个下标时,称这样的数组为二维数组;
(逻辑上把数组看成一个具有行和列的表格或一个矩阵);
语法:
类型名 数组名[常量表达式1][常量表达式2]
二维数组的引用:
引用二维数组元素时必须带有两个下标,引用形式如下:
例如:
int a[3][4]; 引用:
- 10点睛Spring4.1-Application Event
wiselyman
application
10.1 Application Event
Spring使用Application Event给bean之间的消息通讯提供了手段
应按照如下部分实现bean之间的消息通讯
继承ApplicationEvent类实现自己的事件
实现继承ApplicationListener接口实现监听事件
使用ApplicationContext发布消息