一种通用的Swing程序用户行为采集方法和装置与流程
未命名
09-29
阅读:125
评论:0
一种通用的swing程序用户行为采集方法和装置
技术领域
1.本发明涉及计算机软件编程技术领域,特别是涉及一种通用的swing程序用户行为采集方法和装置。
背景技术:
2.java swing是一个为java设计的gui工具包,是一种图形界面工具。swing组件按照一定的布局方式排列组合,最终展示一个完整的图形界面。
3.当swing gui启动后,java虚拟机就会启动三个线程,分别为主线程、事件派发线程(也是事件处理线程)和系统工具包线程。
4.主线程:负责创建并显示改程序的初始界面。
5.事件派发线程:负责gui组件的绘制和更新,通过不断从事件队列中获取事件并调用事件监听器的事件处理方法来处理事件。
6.系统工具包线程:负责从系统事件队列中捕获在该程序界面上的鼠标和键盘操作等底层事件,并把这些事件转换成swing的相对应事件对象放入swing的事件队列中,并循环该线程。
7.基于上述java swing的事件处理机制,用户的实际操作(包括鼠标操作和键盘操作)最终是以各个swing组件对应的事件对象处理的。因此要想识别用户的具体操作就需要在各个组件上添加相应的事件监听器,来识别用户动作(见图1和图2),这就导致源界面代码被修改,对程序的稳定性造成影响。
8.鉴于此,克服该现有技术所存在的缺陷是本技术领域亟待解决的问题。
技术实现要素:
9.本发明要解决的技术问题是如何在不影响源程序的基础上对用户动作行为数据进行采集记录,实现用户行为数据采集代码和组件代码的分离。
10.本发明采用如下技术方案:
11.第一方面,本发明提供了一种通用的swing程序用户行为采集方法,包括:
12.识别鼠标和/或键盘操作产生的事件对象;
13.获取当前被操作swing组件的父容器中各swing组件的位置关系,得到swing组件的名称、swing组件的类型、swing组件的位置、swing组件的逻辑大小尺寸中的一项或者多项信息。
14.根据swing组件的前后变化和被识别的所述事件对象,解析得到操作类型、操作路径以及操作前后swing组件的值,从而生成当前程序的操作用户信息;将多个操作用户信息包装成用户行为对象。
15.优选的,所述方法还包括:
16.根据操作类型创建事件监听器,所述事件监听器用于监听和识别鼠标和/或键盘操作产生的事件对象;
17.在swing程序启动时,将创建的监听器注册到swing程序中。
18.优选的,所述根据操作类型创建事件监听器,具体包括:
19.获取当前swing程序中所包含的各swing组件类型,并基于相应swing组件类型确定可能发生的操作类型;其中,所述操作类型包括鼠标移动、键盘输入、鼠标拖拽、鼠标点击和鼠标滚轮滚动中的一项或者多项;
20.根据确定出的可能发生的操作类型,将相应操作类型的事件监听进程进行创建;其中,对于未被确认可能发生的操作类型的事件监听进行则不做创建。
21.优选的,所述操作类型中鼠标移动,用于引起界面组件的聚焦失焦;键盘输入,用于引起界面组件中文本的变化;鼠标拖拽,用于引起界面组件移动;鼠标点击,用于引起界面按钮点击、菜单打开和窗口打开关闭中的一项或者多项;鼠标滚轮滚动,用于引起界面窗口缩放和/或滚动条移动。
22.优选的,预先根据swing组件的常用操作动作,将swing组件类型和动作类型绑定,形成一个关系映射表,方法还包括:
23.从awtevent中获取到动作类型,记录当前动作的系统时间;
24.根据awtevent中swing组件的前后变化解析得到操作类型、组件路径以及操作前后组件的值,并进一步根据组件的前后变化时间和所述系统时间的动作类型和关系映射表,生成具体的swing组件。
25.优选的,所述关系映射表包括:
26.button按钮和tab页的两类swing组件对应鼠标点击的动作类型;
27.文本框的swing组件对应鼠标移动的动作类型;
28.dialog窗口的swing组件对应鼠标拖拽的动作类型;
29.scroll滚动条的swing组件对应鼠标滚轮滚动;
30.form表单的swing组件对应enter键点击的动作类型;
31.menu菜单的swing组件对应多键组合点击的动作类型。
32.优选的,所述获取当前被操作swing组件的父容器中各swing组件的位置关系,得到swing组件的名称、swing组件的类型、swing组件的位置、swing组件的逻辑大小尺寸中的一项或者多项信息,具体包括:
33.定义一个解析器对象,在此对象中创建名称解析函数;以使用getparant()来获取到的目标组件所在的父类容器组件作为名称解析函数的输入参数;
34.在名称解析函数中按照不同的布局方式,分别遍历容器中的所有元素,根据位置关系将label标签与组件的组合关系检索出来。
35.优选的,通过swing组件对象的getparent()方法,一层一层的获取到当前swing组件的dom层级,当查找到父组件是topcomponent组件时,所述topcomponent组件就是当前操作的入口,使用topcomponent组件的getname()或者gettitle()获取名称,所述名称记录在bottomcpmponent中,同时将dom树信息记录在操作用户信息对象的操作路径属性中;
36.其中,操作用户信息对象用于记录一次用户操作相关信息,包括:操作时间、用户名、操作类型、操作组件名称、操作组件的底层控件名称、操作路径、操作前组件值和操作后组件值中的一项或者多项属性。
37.优选的,所述操作前组件值和操作后组件值具体包括:
38.在swing组件为复选框组件时,只有选中和不选中两种状态,复选框组件的值是对立的两个结果,使用复选框对象包含的函数获取到操作后组件,则操作前组件值就是对立的另一个;
39.在swing组件为文本框组件时,引入聚焦失焦事件来监控文本框的开始输入和输入完成,监听到聚焦事件时,获取一次文本框组件的值,即为操作前组件值;监听到失焦事件时,获取一次文本框组件的值,即为操作后组件值;
40.在swing组件为下拉框组件时,所述下拉框组件由一个文本框和一个列表list组成,鼠标点击list时才会引起下拉框组件值的变化;当监听到下拉框组件的鼠标事件时,获取下拉框组件的值,这个值就是下拉框操作前组件值;当监听到一个列表list组件的鼠标事件时,要获取这个list组件的父组件,当父组件是下拉框时,获取list组件的选中值,这个值即为下拉框组件操作后组件值。
41.第二方面,本发明还提供了一种通用的swing程序用户行为采集装置,用于实现第一方面所述的通用的swing程序用户行为采集方法,所述装置包括:
42.至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,用于执行第一方面所述的通用的swing程序用户行为采集方法。
43.第三方面,本发明还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,用于完成第一方面所述的通用的swing程序用户行为采集方法。
44.本发明为swing程序提供一种用户行为采集方法,无需修改源界面代码,在原有的界面代码之外添加新的采集程序采集用户行为。采集程序独立于现有的业务逻辑代码,不影响现有的网管业务逻辑。提升代码的可维护性,采集数据只需要关注采集对象组件需要记录的数据,不需要关注业务逻辑,业务逻辑代码发生变更也不用修改采集代码。
附图说明
45.为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
46.图1是本发明实施例提供的现有技术中的一种通用的swing程序用户行为采集方法流程图;
47.图2是本发明实施例提供的现有技术中的一种通用的swing程序用户行为采集方法架构示意图;
48.图3是本发明实施例提供的一种通用的swing程序用户行为采集方法流程示意图;
49.图4是本发明实施例提供的一种通用的swing程序用户行为采集方法架构示意图;
50.图5是本发明实施例提供的一种更完整逻辑下的通用的swing程序用户行为采集方法流程示意图;
51.图6是本发明实施例提供的包含函数代码下的一种通用的swing程序用户行为采集方法流程示意图;
52.图7是本发明实施例提供的另一种通用的swing程序用户行为采集方法流程示意图;
53.图8是本发明实施例提供的另一种通用的swing程序用户行为采集方法流程示意图;
54.图9是本发明实施例提供的另一种通用的swing程序中获取布局的方法流程图;
55.图10是本发明实施例提供的一种通用的swing程序中获取复选框组件、文本框组件和下拉框组件的操作行为的方法流程图;
56.图11是本发明实施例提供的一种通用的swing程序中注册时间行为的关系树;
57.图12是本发明实施例提供的另一种通用的swing程序中获取布局的方法结果效果图;
58.图13是本发明实施例提供的一种通用的swing程序用户行为采集装置结构示意图。
具体实施方式
59.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
60.在本发明的描述中,术语“内”、“外”、“纵向”、“横向”、“上”、“下”、“顶”、“底”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明而不是要求本发明必须以特定的方位构造和操作,因此不应当理解为对本发明的限制。
61.本发明中术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”等的特征可以明示或者隐含地包括一个或者更多个该特征。在本技术的描述中,除非另有说明,“多个”的含义是两个或两个以上。
62.在本技术中,除非另有明确的规定和限定,术语“连接”应做广义理解,例如,“连接”可以是固定连接,也可以是可拆卸连接,或成一体;可以是直接相连,也可以通过中间媒介间接相连。此外,术语“耦接”可以是实现信号传输的电性连接的方式。
63.现有的数据分析主要采用的是埋点采集的方式,但埋点是针对特定用户行为或事件进行捕获,需要提前分析需要监控的行为和事件,然后对这些行为和事件进行埋点。因此埋点的工作会随着需求的变化而变更,工作量大且不稳定。
64.埋点方法对源系统代码依赖性太强,是在源系统中需要统计数据的地方植入埋点代码。
65.现有技术中swing网管将用户普通的鼠标键盘操作,通过各组件转换为不同的事件(如:windowevent、actionevent、itemevent等),再通过相应的事件监听器来处理。
66.而本发明则是直接监控用户的键盘鼠标操作,使用全局监听代理对awtevent事件进行处理,通过用户的操作体的用户行为。
67.在本发明中定义用户行为类型至少包括:
68.1、鼠标移动:awtevent.focus_event_mask,引起界面组件的聚焦失焦等。
69.2、键盘输入:awtevent.key_event_mask,引起界面组件中文本的变化等。
70.3、鼠标拖拽:awtevent.mouse_motion_event_mask,引起界面组件移动等。
71.4、鼠标点击:awtevent.mouse_event_mask,引起界面按钮点击、菜单打开、窗口打开关闭等等。
72.5、鼠标滚轮滚动:awtevent.mouse_wheel_event_mask,引起界面窗口缩放、滚动条移动等等。
73.此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
74.实施例1:
75.本发明实施例1提供了一种通用的swing程序用户行为采集方法,如图3和图4所示,包括:
76.在步骤201中,识别鼠标和/或键盘操作产生的事件对象。
77.在步骤202中,获取当前被操作swing组件的父容器中各swing组件的位置关系,得到swing组件的名称、swing组件的类型、swing组件的位置、swing组件的逻辑大小尺寸中的一项或者多项信息。
78.在步骤203中,根据swing组件的前后变化和被识别的所述事件对象,解析得到操作类型、操作路径以及操作前后swing组件的值,从而生成当前程序的操作用户信息。
79.在步骤204中,将多个操作用户信息包装成用户行为对象。
80.本发明实施例为swing程序提供一种用户行为采集方法,无需修改源界面代码,在原有的界面代码之外添加新的采集程序采集用户行为。采集程序独立于现有的业务逻辑代码,不影响现有的网管业务逻辑。提升代码的可维护性,采集数据只需要关注采集对象组件需要记录的数据,不需要关注业务逻辑,业务逻辑代码发生变更也不用修改采集代码。
81.结合本发明实施例,还为相应的事件监听器的导入提供了可实现的方式之一,如图5所示,具体包括:
82.在步骤101中,根据操作类型创建事件监听器,所述事件监听器用于监听和识别鼠标和/或键盘操作产生的事件对象。
83.在步骤102中,在swing程序启动时,将创建的监听器注册到swing程序中。
84.以图6结合伪代码呈现为例,需求分析需要采集数据的用户行为,将这些行为按事件类型分类,针对每种事件类型编写相应的awteventlistener,使用toolkit将监听器注册到全局监听中。
85.如图11所示,在具体实现过程中,可以定义一个接口:iawtrecordregister,所有的需要监控的行为事件都实现这个接口,在网管(包含swing程序)启动时,使用lookupall()方法找到所有的注册器,将全局监听器注册到网管中。
86.需要说明的是,在本发明具体实现过程中,相应的事件监听器是会根据具体监听的事件行为动作而表现出差异性,即一种行为动作会有针对性的事件监听器,这样的实现方式可以大大提高响应的效率和记录行为动作系统时间的准确性。为此,进一步在能够获取当前swing程序所包含的各swing组件的情况下,针对性启动与包含的swing组件相适配的事件监听器则可以进一步有效的压缩计算资源的消耗。所述根据操作类型创建事件监听器,在步骤101中还包括以下执行步骤细节,如图7所示:
87.在步骤1011中,获取当前swing程序中所包含的各swing组件类型,并基于相应
swing组件类型确定可能发生的操作类型。
88.其中,所述操作类型包括鼠标移动、键盘输入、鼠标拖拽、鼠标点击和鼠标滚轮滚动中的一项或者多项。
89.所述操作类型中鼠标移动,用于引起界面组件的聚焦失焦;键盘输入,用于引起界面组件中文本的变化;鼠标拖拽,用于引起界面组件移动;鼠标点击,用于引起界面按钮点击、菜单打开和窗口打开关闭中的一项或者多项;鼠标滚轮滚动,用于引起界面窗口缩放和/或滚动条移动。
90.在步骤1012中,根据确定出的可能发生的操作类型,将相应操作类型的事件监听进程进行创建;其中,对于未被确认可能发生的操作类型的事件监听进行则不做创建。
91.对于本发明实施例实现而言,为了实现的方便性,存在一种优选的扩展实现方案,预先根据swing组件的常用操作动作,将swing组件类型和动作类型绑定,形成一个关系映射表,在与实施例步骤203相结合过程中,如何实现对swing组件的确认和相应操作类型、操作路径的关联生成,如图8所示,方法还包括:
92.在步骤2031中,从awtevent中获取到动作类型,记录当前动作的系统时间。
93.在步骤2032中,根据awtevent中swing组件的前后变化解析得到操作类型、组件路径以及操作前后组件的值,并进一步根据组件的前后变化时间和所述系统时间的动作类型和关系映射表,生成具体的swing组件。
94.此处生成具体的swing组件就包含了步骤203中有关的得到操作类型、操作路径以及操作前后swing组件的值等等。
95.其中,所述关系映射表包括:
96.button按钮和tab页的两类swing组件对应鼠标点击的动作类型;
97.文本框的swing组件对应鼠标移动的动作类型;
98.dialog窗口的swing组件对应鼠标拖拽的动作类型;
99.scroll滚动条的swing组件对应鼠标滚轮滚动;
100.form表单的swing组件对应enter键点击的动作类型;
101.menu菜单的swing组件对应多键组合点击的动作类型。
102.接下来,本发明实施例中还将结合伪代码的方式,将上述方法过程进行进一步详尽而透彻的阐述。
103.例如:所述获取当前被操作swing组件的父容器中各swing组件的位置关系,得到swing组件的名称、swing组件的类型、swing组件的位置、swing组件的逻辑大小尺寸中的一项或者多项信息,如图9所示,具体包括:
104.在步骤301中,定义一个解析器对象layoutparsermanagement,在此对象中创建名称解析函数void parsename(container component);其中container为使用getparant()来获取的目标组件所在的父类容器组件。
105.在步骤302中,在parsename(container component)函数中按照不同的布局方式,分别遍历容器中的所有元素,根据位置关系将label标签与组件的组合关系检索出来。
106.在步骤303中,通过swing组件对象的getparent()方法,一层一层的获取到当前swing组件的dom层级,当查找到父组件是topcomponent组件时,所述topcomponent组件就是当前操作的入口,使用topcomponent组件的getname()或者gettitle()获取名称,所述
名称记录在bottomcpmponent中,同时将dom树信息记录在操作用户信息对象的操作路径属性中。
107.其中,操作用户信息对象用于记录一次用户操作相关信息,包括:操作时间、用户名、操作类型、操作组件名称、操作组件的底层控件名称(功能名称)、操作路径、操作前组件值和操作后组件值中的一项或者多项属性。
108.例如:所述操作前组件值和操作后组件值,如图10所示,具体包括:
109.在步骤401中,在swing组件为复选框组件时,只有选中和不选中两种状态,复选框组件的值是对立的两个结果,使用复选框对象的getselected()获取到操作后组件,则操作前组件值就是对立的另一个。
110.在步骤402中,在swing组件为文本框组件时,引入聚焦失焦事件来监控文本框的开始输入和输入完成,监听到聚焦事件时,获取一次文本框组件的值,即为操作前组件值;监听到失焦事件时,获取一次文本框组件的值,即为操作后组件值。
111.在步骤403中,在swing组件为下拉框组件时,所述下拉框组件由一个文本框和一个列表list组成,鼠标点击list时才会引起下拉框组件值的变化;当监听到下拉框组件的鼠标事件时,获取下拉框组件的值,这个值就是下拉框操作前组件值;当监听到一个列表list组件的鼠标事件时,要获取这个list组件的父组件,当父组件是下拉框时,获取list组件的选中值,这个值即为下拉框组件操作后组件值。
112.本发明实施例为swing网管提供用户行为采集方法,无需修改源界面代码,在原有的界面代码之外添加新的采集程序采集用户行为。采集程序独立于现有的业务逻辑代码,不影响现有的网管业务逻辑。提升代码的可维护性,采集数据只需要关注采集对象组件需要记录的数据,不需要关注业务逻辑,业务逻辑代码发生变更也不用修改采集代码。
113.如图12所示,为网管登录按钮点击行为记录实例。在unm2000网管里面一般通过在源代码中添加日志或者是后台接口调用添加日志的方式来记录网管的操作,日志的内容格式因开发人员不同儿存在差异,且日志的记录时机也没有一个明确的标准,导致记录的用户操作数据无法完整的反应网管的使用情况。
114.实施例2:
115.本专利的技术方案是一种swing程序用户行为采集方法,相较实施例1中主要阐述的技术方案过程而言,本发明实施例更侧重融入函数、类等伪代码,进行更契合程序代码测的技术方案阐述,并且,在本实施例中将更多方法功能进行模块对象承载形式下的描述,例如在本实施例中主要包括用户行为对象、监听器、事件转换器、组件解析器、布局解析器五个部分。
116.s1:用户行为对象,创建一个对象useropertionrecord,此对象用于记录一次用户操作相关信息,具体设计如下:
117.public class useropertionrecord{
118.timestamp time;//操作时间
119.string username;//用户名
120.string operationtype;//操作类型
121.string componentname;//操作组件名称
122.string bottomcpmponent;//操作组件的底层控件名称(功能名称)
123.string path;//操作路径
124.string oldvalue;//操作前组件值
125.string newvalue;//操作后组件值
126.}
127.s2:监听器,将用户鼠标键盘的操作分类,对每一类操作创建一个监听器,实行对此类操作行为的监听。按照用户操作,概括为以下五类:
128.1、鼠标移动:awtevent.focus_event_mask,引起界面组件的聚焦失焦等;
129.2、键盘输入:awtevent.key_event_mask,引起界面组件中文本的变化等;
130.3、鼠标拖拽:awtevent.mouse_motion_event_mask,引起界面组件移动等;
131.4、鼠标点击:awtevent.mouse_event_mask,引起界面按钮点击、菜单打开、窗口打开关闭等等;
132.5、鼠标滚轮滚动:awtevent.mouse_wheel_event_mask,引起界面窗口缩放、滚动条移动等等。
133.按照以上五类动作创建五个监听器,使用lookup工具,在swing程序启动时将这五个监听器注册到全局监听器中:
134.toolkit.getdefaulttoolkit().addawteventlistener(awteventlistener l)。
135.s3:事件转换器,鼠标键盘操作产生的awtevent事件被监听器接收到后,只能得到一个抽象的事件对象,要想将这个抽象的事件对象关联到swing界面上,就必须将此抽象事件转换成界面上的swing组件,具体设计如下:
136.s3.1记录操作时间,当监听器接收到键鼠操作事件时,获取当前系统时间,此时间即为用户的操作时间;
137.s3.2根据swing组件的常用操作动作,将组件类型和动作类型绑定,形成一个关系映射表,如下表示例:
[0138][0139][0140]
其中文本框组件应该是键盘操作,但实际操作中我们不关注键盘输入过程中文本框的变化,而是关注开始输入前的值和输入完成后的值,因此将鼠标光标移动引起的失焦聚焦与文本框绑定。
[0141]
s3.3从awtevent中获取到事件源对象和动作类型,根据组件-动作映射关系表将事件源对象转换成具体的swing组件。
[0142]
s4.布局解析器,swing组件jcomponent中有个name属性,可以根据name属性获取到当前组件的名称,但在实际程序中,开发人员可能没有给组件设置它的name属性,因此就需要构建一个布局解析器,来分析组件在界面中的布局,从而得到组件的名称和位置关系。界面布局中,一般采用的是标签label和组件jcomponent组合,因此获取到所有的label标签后,组件左边相邻的label标签就是组件的名称信息,具体设计如下:
[0143]
s4.1定义一个解析器对象layoutparsermanagement,在此对象中创建一个方法,示例:
[0144]
void parsename(container component);其中container为目标组件所在的父类容器组件,可以使用getparant()来获取。
[0145]
在这个方法中按照不同的布局方式,分别遍历容器中的所有元素,根据位置关系将label标签与组件的组合关系检索出来。
[0146]
s4.2常用的界面布局方式有flowlayout、formlayout、borderlayout。
[0147]
s5.组件解析器,得到swing组件对象后,我们需要知道这个组件是干什么的,在哪个具体的功能中使用的,在程序中的入口是什么等信息,因此就需要对此组件进行解析,分析它的dom关系,了解用户操作对它的影响。具体设计如下:
[0148]
s5.1获取系统登录用户信息,登录用户的信息即为当前操作用户信息;
[0149]
s5.2通过组件对象的getparent()方法,一层一层的获取到当前组件的dom层级,当查找到父组件是顶部组件topcomponent时,那么这个topcomponent组件就是当前操作的入口,使用topcomponent的getname()或者gettitle()获取名称,此名称记录在底部组件bottomcpmponent中,同时将dom树信息记录在path属性中;
[0150]
s5.3在组件解析器中,swing组件一般分为输入型控件和非输入型组件。对输入型控件,我们需要关注用户操作引起的值的变化,下面以文本框、复选框、下拉框三种输入型组件为例,来介绍如何获取组件操作前后值得变化:
[0151]
1、复选框组件只有选中和不选中两种状态,因此它的值是对立的两个结果,使用复选框对象的getselected()获取到操作后的值后,那么操作之前的值就是对立的另一个;
[0152]
2、文本框在每次键盘输入时它的值都会发生变化,但我们并不需要了解用户输入过程中的值,只需要知道输入前和输入完成之后的值。因此我们需要引入聚焦失焦事件来监控文本框的开始输入和输入完成,监听到聚焦事件时,获取一次文本框组件的值,即为操作前的值;监听到失焦事件时,获取一次文本框组件的值,即为操作后的值;
[0153]
3、下拉框组件是由一个文本框和一个列表list组成,鼠标点击list时才会引起下拉框组件值的变化。按此逻辑,当监听到下拉框组件的鼠标事件时,获取下拉框的值,这个值就是下拉框操作前的值;当监听到一个列表list组件的鼠标事件时,要获取这个list组件的父组件,当父组件是下拉框时,获取list组件的选中值,这个值即为下拉框组件操作后的值。
[0154]
通过s3、s4、s5三种处理器对键鼠操作的解析,最终将一次用户动作转化成数据对象,将次对象信息保存下来,就完成了一次用户动作的采集。
[0155]
本发明实施例提供了一种新的行为采集方法,行为采集代码和界面组件代码的分离,在不影响现有程序逻辑的情况下,对网管的操作数据进行记录。采集数据更加灵活,代码耦合度更低;且界面上同一种组件只需要添加一份解析代码,更具备通用性,可维护性更高。
[0156]
实施例3:
[0157]
如图13所示,是本发明实施例的通用的swing程序用户行为采集装置的架构示意图。本实施例的通用的swing程序用户行为采集装置包括一个或多个处理器21以及存储器22。其中,图13中以一个处理器21为例。
[0158]
处理器21和存储器22可以通过总线或者其他方式连接,图13中以通过总线连接为例。
[0159]
存储器22作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序和非易失性计算机可执行程序,如实施例1中的通用的swing程序用户行为采集方法。处理器21通过运行存储在存储器22中的非易失性软件程序和指令,从而执行通用的swing程序用户行为采集方法。
[0160]
存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器,这些远程存储器可以通过网络连接至处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0161]
所述程序指令/模块存储在所述存储器22中,当被所述一个或者多个处理器21执行时,执行上述实施例1中的通用的swing程序用户行为采集方法,例如,执行以上描述的图3、图5-图10所示的各个步骤。
[0162]
值得说明的是,上述装置和系统内的模块、单元之间的信息交互、执行过程等内容,由于与本发明的处理方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
[0163]
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(rom,read only memory)、随机存取存储器(ram,random access memory)、磁盘或光盘等。
[0164]
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
技术特征:
1.一种通用的swing程序用户行为采集方法,其特征在于,包括:识别鼠标和/或键盘操作产生的事件对象;获取当前被操作swing组件的父容器中各swing组件的位置关系,得到swing组件的名称、swing组件的类型、swing组件的位置、swing组件的逻辑大小尺寸中的一项或者多项信息;根据swing组件的前后变化和被识别的所述事件对象,解析得到操作类型、操作路径以及操作前后swing组件的值,从而生成当前程序的操作用户信息;将多个操作用户信息包装成用户行为对象。2.根据权利要求1所述的通用的swing程序用户行为采集方法,其特征在于,所述方法还包括:根据操作类型创建事件监听器,所述事件监听器用于监听和识别鼠标和/或键盘操作产生的事件对象;在swing程序启动时,将创建的监听器注册到swing程序中。3.根据权利要求2所述的通用的swing程序用户行为采集方法,其特征在于,所述根据操作类型创建事件监听器,具体包括:获取当前swing程序中所包含的各swing组件类型,并基于相应swing组件类型确定可能发生的操作类型;其中,所述操作类型包括鼠标移动、键盘输入、鼠标拖拽、鼠标点击和鼠标滚轮滚动中的一项或者多项;根据确定出的可能发生的操作类型,将相应操作类型的事件监听进程进行创建;其中,对于未被确认可能发生的操作类型的事件监听进行则不做创建。4.根据权利要求3所述的通用的swing程序用户行为采集方法,其特征在于,所述操作类型中鼠标移动,用于引起界面组件的聚焦失焦;键盘输入,用于引起界面组件中文本的变化;鼠标拖拽,用于引起界面组件移动;鼠标点击,用于引起界面按钮点击、菜单打开和窗口打开关闭中的一项或者多项;鼠标滚轮滚动,用于引起界面窗口缩放和/或滚动条移动。5.根据权利要求1所述的通用的swing程序用户行为采集方法,其特征在于,预先根据swing组件的常用操作动作,将swing组件类型和动作类型绑定,形成一个关系映射表,方法还包括:从awtevent中获取到动作类型,记录当前动作的系统时间;根据awtevent中swing组件的前后变化解析得到操作类型、组件路径以及操作前后组件的值,并进一步根据组件的前后变化时间和所述系统时间的动作类型和关系映射表,生成具体的swing组件。6.根据权利要求5所述的通用的swing程序用户行为采集方法,其特征在于,所述关系映射表包括:button按钮和tab页的两类swing组件对应鼠标点击的动作类型;文本框的swing组件对应鼠标移动的动作类型;dialog窗口的swing组件对应鼠标拖拽的动作类型;scroll滚动条的swing组件对应鼠标滚轮滚动;form表单的swing组件对应enter键点击的动作类型;menu菜单的swing组件对应多键组合点击的动作类型。
7.根据权利要求1所述的通用的swing程序用户行为采集方法,其特征在于,所述获取当前被操作swing组件的父容器中各swing组件的位置关系,得到swing组件的名称、swing组件的类型、swing组件的位置、swing组件的逻辑大小尺寸中的一项或者多项信息,具体包括:定义一个解析器对象,在此对象中创建名称解析函数;以使用getparant()获取到的目标组件所在的父类容器组件作为名称解析函数的输入参数;在名称解析函数中按照不同的布局方式,分别遍历容器中的所有元素,根据位置关系将label标签与组件的组合关系检索出来。8.根据权利要求7所述的通用的swing程序用户行为采集方法,其特征在于,通过swing组件对象的getparent()方法,一层一层的获取到当前swing组件的dom层级,当查找到父组件是顶部组件时,所述顶部组件就是当前操作的入口,使用顶部组件获取名称,所述名称记录在底部组件中,同时将dom树信息记录在操作用户信息对象的操作路径属性中;其中,操作用户信息对象用于记录一次用户操作相关信息,包括:操作时间、用户名、操作类型、操作组件名称、操作组件的底层控件名称、操作路径、操作前组件值和操作后组件值中的一项或者多项属性。9.根据权利要求8所述的通用的swing程序用户行为采集方法,其特征在于,所述操作前组件值和操作后组件值具体包括:在swing组件为复选框组件时,只有选中和不选中两种状态,复选框组件的值是对立的两个结果,使用复选框对象包含的函数获取到操作后组件,则操作前组件值就是对立的另一个;在swing组件为文本框组件时,引入聚焦失焦事件来监控文本框的开始输入和输入完成,监听到聚焦事件时,获取一次文本框组件的值,即为操作前组件值;监听到失焦事件时,获取一次文本框组件的值,即为操作后组件值;在swing组件为下拉框组件时,所述下拉框组件由一个文本框和一个列表list组成,鼠标点击list时才会引起下拉框组件值的变化;当监听到下拉框组件的鼠标事件时,获取下拉框组件的值,这个值就是下拉框操作前组件值;当监听到一个列表list组件的鼠标事件时,要获取这个list组件的父组件,当父组件是下拉框时,获取list组件的选中值,这个值即为下拉框组件操作后组件值。10.一种通用的swing程序用户行为采集装置,其特征在于,包括至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,用于执行权利要求1-9任一所述的通用的swing程序用户行为采集方法。
技术总结
本发明涉及计算机软件编程技术领域,提供了一种通用的Swing程序用户行为采集方法和装置。其中识别鼠标和/或键盘操作产生的事件对象;获取当前被操作Swing组件的父容器中各Swing组件的位置关系,得到Swing组件的名称、Swing组件的类型、Swing组件的位置、Swing组件的逻辑大小尺寸中的一项或者多项信息;根据Swing组件的前后变化和被识别的所述事件对象,解析得到操作类型、操作路径以及操作前后Swing组件的值,从而生成当前程序的操作用户信息。本发明提升代码的可维护性,采集数据只需要关注采集对象组件需要记录的数据,不需要关注业务逻辑,业务逻辑代码发生变更也不用修改采集代码。改采集代码。改采集代码。
技术研发人员:张勇 吕海林 游传聪
受保护的技术使用者:烽火通信科技股份有限公司
技术研发日:2023.06.21
技术公布日:2023/9/25
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
航空商城 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/