61阅读

入门实例-UI入门实例做一个个性的播放器

发布时间:2018-03-03 所属栏目:ui层

一 : UI入门实例做一个个性的播放器

今天在网上看到了一个播放器的实例教程,感觉很不错,很适合UI入门新手练习,发来给大家看看,一起学习啊,好了废话不说了,开始学习吧:

最终效果图

 UI入门实例做一个个性的播放器

1.新建一个文件,图象大小设置为200X200象素,72DIP,白色背景,RGB模式,.新建图层1,选择椭圆选框工具在图象中拉一个椭圆的选区出来

 UI入门实例做一个个性的播放器

2.选择渐变填充工具,渐变样式选择‘径向’渐变,并将渐变色作如下图般设置,从选区的左上角向选区的右下角拖动鼠标来填充选区

 UI入门实例做一个个性的播放器 UI入门实例做一个个性的播放器

3.用鼠标双击图层1,在图层样式面板中钩选投影、内阴影、外发光,投影参数不作设置,按默认样式,将内阴影的不透明度降低至20%,距离设置为0个象素,阻塞保持0%,大小设置为2个象素;再将内发光的不透明速降低至15%,发光色也设置为白色,其它不变

 UI入门实例做一个个性的播放器

4.新建图层2,选择椭圆渐变工具,按住SHIFT在前一个椭圆的范围内拉一个正圆的选区,再选择渐变填充工具,依然是前一次用的渐变色,简便样式也同样是‘径向’渐变,从正圆选区的左上角(圆形以外)到有右下角(圆形以内)拖动鼠标来填充渐变色

 UI入门实例做一个个性的播放器

5.用鼠标双击图层2,在图层样式面板中钩选投影、内阴影、外发光效果,将投影的距离设置为0个象素,扩展为0%,大小设置为8个象素,其它不变;将内阴影的距离设置为0个象素,阻塞为0%,大小为5个象素,其它不变;再将外发光的发光色更改为白色,扩展为0%,大小设置为8个象素,其它不变。完成后再执行菜单-图象-调整-亮度对比度,将亮度设置为10,对比度设置为50

 UI入门实例做一个个性的播放器

6.新建图层3,选择椭圆选框工具,按住SHIFT在前一个制作的圆形的中间靠左的位置拉一个正圆的选区,将前景色设置为R:145、G:165、B:125,填充选区

 UI入门实例做一个个性的播放器

7.用鼠标双击图层3,在图层样式面板中钩选投影、内阴影、内发光效果,将投影的距离跟大小都设置为6个象素,其它不变;再将内阴影的不透明度设置为100%,距离设置为0个象素,阻塞设置为16%,大小设置为5个象素,等高线选择第二排第五种样式;再将内发光的发光色更改为白色,然后将扩展的数值更改为18%,大小更改为8个象素,其它不变

 UI入门实例做一个个性的播放器

8.下面来做液晶屏内的有机层面表现出来。当前图层定在图层3,执行菜单-滤镜-杂色-添加杂色,将数量设置为1%,选择平均分布 ,并钩选‘单色’选项。完成后再执行菜单-滤镜-渲染-光照效果,将光照参数作如(图9)般设置。完成后效果如

 UI入门实例做一个个性的播放器 UI入门实例做一个个性的播放器

9.好了,屏幕差不多就这样完成了,下面要做的是液晶屏幕上的图案及文字。将前景色设置为黑色,用文字输入工具在在图层3的上面输入文字88-88,并可用自由变换命令将文字缩放到适当大小,完成后用鼠标双击此图层,将图层的混合模式更改为柔光,再在图层样式面板中钩选斜面和浮雕效果,将浮雕的深度设置为1%,大小跟软化都设置为0个象素,其它不变,并将此图层的不透明度更改为50%

 UI入门实例做一个个性的播放器

10.将文字图层复制一个置于图层的最顶层,将图层的混合模式改为叠加,并取消斜面和浮雕效果的设置,并将图层的不透明度更改为100%,再用文字输入工具,将此行文字修改为别的数字或字母

 UI入门实例做一个个性的播放器

11.文字完成了,下面再来为液晶

屏加一些小图标,在两个文字图层的上面新建图层4,用矩形选矿工具在画面上框一个横向的宽度为1个象素的矩形选区,填充为黑色,将此黑线条垂直等距离的复制几份,再将所有黑线条的图层合并,再用矩形选框工具框选不要的部分,将其删除

 UI入门实例做一个个性的播放器

12.将图层4的混合模式更改为柔光,再将图层4复制一份为图层4副本,用矩形选框工具,将一些黑色线条的块框选后删除,来表达出音乐播放时节奏灯的跳动状

 UI入门实例做一个个性的播放器

13.如想再做点别的图案或文字上去的话,方法还是相同的,自己想象啦

 UI入门实例做一个个性的播放器

14.将图层1、2、3连接,执行菜单-编辑-自由变换,将连接的播放器的3个底层图案旋转个角度,这样看上去的播放器就不那么死板了

 UI入门实例做一个个性的播放器

15.在图层面板的最顶层新建一个图层,按住CTRL点击液晶显示屏的图层,使其选区浮起,执行菜单-选择-修改-收缩,将选区收缩3个象素,再选择椭圆选框工具,按住SHIFT+ALT后框选圆形选区的左上部分,这样选能将不需要的右下部分的选区直接去除

 UI入门实例做一个个性的播放器

16.在选择渐变填充工具,渐变样式选择线性样式,再将渐变色的左右端的颜色都设置为白色,并将右端颜色的不透明度设置为0,在选区中从右下角至左上角拉动鼠标来填充选区

 UI入门实例做一个个性的播放器

17.下来为播放器加两个简单的按钮,在图层面板的最顶端新建一个图层,用钢笔工具,沿着图层1中播放器底层椭圆的右下部分的弧度勾画出一个回旋标式的轮廓(图19),将路径转换为选区,到图层1中将选区中的部分复制,并粘贴到新建的图层中

 UI入门实例做一个个性的播放器

18.双击此图层,在图层样式面板中钩选投影、内发光及斜面和浮雕效果,将投影的距离设置为0个象素,大小设置为4个象素,再将投影的等高线更 改为第二排第四种样式,其它不变;再将内发光的发光色设置为白色,其它不变;将斜面和浮雕中的大小设置为2个象素,软化设置为3个象素,并将等高线样式更 改为第二排第三种样式,其它按默认设置,不做更改。完成后将图层的混合模式更改为正片叠底

 UI入门实例做一个个性的播放器

19.执行菜单-图象-调整-亮度/对比度,将亮度的数值调节至最高,再用多边形套索工具框选出按钮的中间分割部分,并将选中部分删除

 UI入门实例做一个个性的播放器

20.完成后再在图层面板的最上层新建一个图层,选择铅笔工具,将画笔大小设置为1个象素,前景色设置为黑色,在按钮上画两个小图标

 UI入门实例做一个个性的播放器

21.用鼠标双击小图标的图层,钩选投影、内发光、斜面和浮雕效果。将投影的距离跟扩展都设置为0,大小设置为2个象素,并将等高线样式更改为第一排第三种样式,其它不变;再将内发光的发光色更改为白色,其它不作设置;将斜面和浮雕中的样式更改为外斜面,其它不变

 UI入门实例做一个个性的播放器

22.好了,按钮也完成了,这个简单的微型播放器也就可以告一段落了,对颜色不满的话可以通过调节菜单-图象中的色彩平衡(CTRL+B)和色相/饱和度(CTRL+U),或者曲线命令(CTRL+M),也可以用渐变映射命令(ALT-I-M)来调整

 UI入门实例做一个个性的播放器

好了教程到这里就结束了,这个实例感觉,很适合新手,只要大家认真做,应该都可以做出来的.希望三联教程提供的教程对大家有帮助哦!

二 : 从一实例入门

从一实例入门

本节有大侠Tianwei的一篇文章和一实例破解。

一、特附:Tianwei对一封信的答复,其介绍的一些理论知识很适合初学者。 对一封 EMAIL 的回答

原信来自 ???????@263.net( 未得允许 , 不便说他的 EMAIL:)

原信如下 :

大哥: 我按你的方法在破解 Teleport Pro 中先填写了姓名、 公司、注册号然后按 CTRL+D 进入 SIC 模式再 BPX HMEMCPY

F5

OK

拦截下来,接下来就是进入 Teleport pro 领空的问题:

关于程式的领空的慨念我还是不明白,我以前看过大 哥的文章是以 SIC 模式下三分之一中的 VMM 可是我按了 多次 F12 都末见到 VMM( 只看见 KERNEL.... 等 , 请教各代 表什么意思 ?) 不知是否正确。还有以下 WINICE 中断视 窗各代表什么意思?在什么样的书籍中可查到 ? 因为 连它的意思都不懂我觉得很难真正学会。谢谢大哥。 createwindow

createwindowex

dialogbox

createdialogindirect

dialogboxindirect

createdialogparam

createdialogindirectparam

HMEMCPY

.......

??????@263.net

99.6.18

//======================================================== 因为此信对初学者有一些代表性 ,

所以逐段回答如下 :

> ** 大哥:

呵 , 俺是大哥了 !:)

> ** 拦截下来,接下来就是进入 Teleport pro 领空的问题:

> ** 关于程式的领空的慨念我还是不明白,

我想你肯定看过网上一些前辈们写的文章 , 他们多是台港 地区的 , 所以称 - 程序 - 为 - 程式 -, 而我们大陆的学生在学校 里或书本上用 - 程序 - 一词较多 . 现在是赶时髦或叫做 - 称谓 大融合 - 的时代 , 叫什么都没有关系 , 但有一点是肯定的 : 我们说的都是同一档子事 ---PROGRAM-

所谓 - 领空 - 也是他们传出来的 , 比较形象 , 姑且就这么叫吧 !

实际上是指 : 在某一时刻 ,CPU 的 CS:IP(EIP) 所指向的某一段 代码的所有者所在的区域 . 就拿你 TELEPORT 的 - 领空 - 来说 , 实际上是指 SICE 所停下来时光棒所在的那一句代码是属于 谁的 , 属于 TELEPORT 的就叫 TELEPORT 的 - 领空 -, 属于 KERNEL 的就叫 KERNEL 的 - 领空 -. 你如果想窥探 TELEPORT 的代码 , 就 要在 TELEPORT 的 - 领空 - 中进行跟踪 .

至于为什么要按 F12, 因为 F12 是 SICE 的 - 快捷键 -, 代表了指 令 :P RET ( 这可以设置的 ),P RET 的意思是让 SICE 一直执行 代码 , 直到出现 RET (XXXX) 命令 , 再跳出来拦截 , 这时 , 当前 IP(EIP) 会是停在 RET (XXXX) 后的某一条语句上 , 通常是在 某一个 CALL XXXXXXXX 后面 . 由于我们通常用 SICE 在某些底 层的 WINDOWS 函数上设断点 , 所以 F12 是很管用的 . 因为程序 的作者用的是高级语言 ,WINDOWS 又是提倡 - 透明 -, 不希望 程序员知道底层的操作 , 而只提供给他们高层的接口 , 而相 当多的高级函数调用某个一定的底层函数 , 所以当你在底层 函数上下断点 , 再用 F12, 就可以知道他用的是什么函数了 . SICE 用于程序员可以很方便 , 很快捷地找出程序调用错在哪 , 是哪个参数出了问题 . 当然用于拆解也是可以的 , 好象一个 高明的医生 , 会医人 , 也会杀人 , 而且还轻车熟路 !

由于 WINDOWS 调用是很复杂的 , 一个调一个 , 所以 F12 可能要 执行很多次才能看到这个 CALL 是谁发出的 . 以下解释几个你说的常用断点 .

实际上他们大多是 WINDOWS 函数 如果你编过 WINDOWS 程序的话 , 这些是很常用的 . > createwindow

顾名思义 , 产生一个窗口 :

HWND CreateWindow(

LPCTSTR lpClassName, // 窗口类的名

LPCTSTR lpWindowName, // 窗口名

DWORD dwStyle, // 窗口的风格

int x, // 窗口水平位置

int y, // 窗口垂直位置

int nWidth, // 窗口宽

int nHeight, // 窗口高

HWND hWndParent, // 父窗口句柄

HMENU hMenu, // 窗口菜单句柄 ( 或子窗口标识 )

HANDLE hInstance, // 应用程序实例句柄

LPVOID lpParam

);

以下几个我写的简单些

> createwindowex

这个函数实际上同 CREATEWINDOW 是一回事 , 只不过多

了一些风格 ,( 即多了个参数 )

> dialogbox

显示一个模式对话框

> dialogboxindirect

也显示一个模式对话框 , 同前者的不同在于有个参数不一样 , 多

了一些风格 .

> createdialogindirect

显示一个无模式对话框 , 同前二者的区别在于 : 它不会让你 回不去主程序 . 而前二者非要你在对话框中做点什么才肯 让你接触主界面 . 我这样说你明白了吗 ? 一些共享软件用的 是哪一个 ? > createdialogparam

显示一个无模式对话框 , 同前者的差别在 : 它可以给对话框一个 初始化的数值 , 比如一开始就始某一个按钮失效 , 直到你同意 了它的 LICENCE 后再给

那个按钮有效 . > createdialogindirectparam

可以参照上面的 , 多了一点风格而已 .

> HMEMCPY

这个东西很常用 , 但一些编程书籍上很少讲 , 原因就是我上面提 到的 , 它是底层的东西 , 没有特殊需要 , 一般不要直接调用 . 但的确它是很有用的 ! 有意思的是它执行的操作很简单 , 只是将内存中的一块数据拷贝到另一个地方 , 我只有它在 WINDOWS3.1 中的原型 , 但用法是一样的 : void hmemcpy(hpvDest, hpvSource, cbCopy)

void _huge* hpvDest; // 目的数据地址

const void _huge* hpvSource; // 源数据地址

long cbCopy; // 数据大小 (BYTES)

为什么要加个 -h- 在 -memcpy- 前面呢 ? 因为它可以传送大于 64K 的 数据 . 是 -HUGE- 的意思 .

我想 , 这是网上讲这个函数比较详细 ( 谁知道呢 ?) 的地方了 . 有些 文章只是照葫芦画瓢 , 你用我也用 , 大家都用 . 但谁也不知道它 在干什么 ?( 或是不告诉你 , 就是不告诉你 !) 实际上 , 我说的是一个严肃的问题 , 我写这个网页的目的不是来探 讨怎么破解某某软件的 , 更多的是为了学习和研究 WINDOWS 系统 , 你从我的 - 修改 RICHWIN4.3 使之用于 BECKY!- 的文章中就应该了解 这一点 . 也许当你 3,5 个月后会发现你自己会对破解软件不是太感 兴趣了 , 而转去研究怎样编写程序 , 那么 , 我的目的也就达到了 ! 至于参考书籍 , 新华书店里一般都有 ,-WINDOWS 编程 - 一类名目的 都可以看看 . 而我由于被工作所忙 , 没有太多时间花费在这上面 , 所以后面的道路要靠你自己了 ! 祝好运 ! by Tianwei

1999,6,19

二、实例入门

好了,看完大侠Tianwei的指教,我们从一实例入门,我尽量写得仔细、啰唆些。 软件名称:这是一crackme程序(注:crackme就是一些人专门为练习破解而写的一些小程序)

保护类型:姓名、序列号保护

软件下载:lesson5-ex 162K

1、启动SOFTICE或TRW2000

我们按上一节安装好SOFTICE或TRW2000了,用SOFTICE装载windows启动完毕后,你按CTRL+D将会出现调试画面。如没出现,请参考第一节。

TRW2000的运行,只需双击TRW2000图标,启动后,按CTRL+N即可激活TRW2000,出现调试画面。

SOFTICE和TRW2000两者,你只需选一种就可。

2、 运行crackme程序

运行要破解的crackme程序,出现一窗口,要求人输入姓名(Name)和序列号(serial),这里你随便输入一些信息,如姓名:toye,序列号:12345.点击OK将出现“Wrong Code" 的出错框。

3、Ctrl-D叫出SOFTICE,下断点

BPX HMEMCPY (这句命令作用是windows系统如调用函数HMEMCPY,SOFTICE将中断)

此例在Windows NT中:bpx memcpy不能拦断,可试试MessageBox(A)或

Dialogbox(A)设断拦截对话框,一般都能拦截成功。

注:在windows NT下类似命令是bpx memcpy

4、 按F5返回到windows下,点击crackme程序中的按钮OK.这时程序将要调用函数hmemcpy,你会中断如下:

段地址:偏移地址 机器码 汇编代码

0117:9E2D CA0800 RETF 0008

KERNEL!HMEMCPY ←你会中断与此(函数hmemcpy)

0117:9E30 55 PUSH BP

0117:9E31 8BEC MOV BP,SP

0117:9E33 1E PUSH DS

0117:9E34 6657 PUSH EDI

0117:9E36 6656 PUSH ESI

0117:9E38 FC CLD

0117:9E39 668B4E06 MOV ECX,[BP+06]

0117:9E3D 67E377 JCXZ 9EB7

0117:9E40 6633F6 XOR ESI,ESI

0117:9E43 668BFE MOV EDI,ESI

0117:9E46 C5760A LDS SI,[BP+0A]

0117:9E49 C47E0E LES DI,[BP+0E]

0117:9E4C 668B460A MOV EAX,[BP+0A]

0117:9E50 663B460E CMP EAX,[BP+0E]

0117:9E54 734E JNB 9EA4

0117:9E56 66C1C010 ROL EAX,10

------------------------KERNEL(1)+9E2d------------------------

上面一行表示现在处于“KERNEL(1)+9E2d”领空,一般KERNEL???或USER??表示在系统领空,这时程序代码不能随便乱改,不然系统会崩溃,但可设断。

5、机器码可用开关指令code on打开(code off关闭),这时你可按F10(或^P)单步执行指令(光条会向下一行行的移动)。按F6(或^EC)光条会在命令窗口和程序代码窗口中切换。

6、OK,我们继续,用命令 BC *清除所有的断点设置(在这里就是清除函数hmemcpy断点)。注:BD * 命令是暂停所有断点作用,直到你用命令 BE * 恢复所有的断点。具体参考上一节。

7、清除了刚才设的断点,我们可让程序一步一步地执行,但现在是在系统领空,我们要来到cracme领空才好分析序列号产生的代码。因此我们可按F10一步步执行,但这样太浪费时间,你会发现用F10执行代码来到一指令:

RET ???

再按F10就会返回到CALL(子程序)XXXXXX 一行,也就是从这个CALL里面的代码走出来了。其实F12就是这功能,可走出当前的CALL.因此我们直接按F12,大概8下直到领空变为:CRACKME6!CODE+???,这表明己来到crackme程序的代码段了。 (注:在TRW2000下可用命令pmodule快速回到程序的领空,我很喜欢这命令,不然要按很多的F12才能回到程序的领空。)

8、此时小心地按F12,再接着走出几个CALL,你会来到如下代码处:

0137:004417ED CALL 004231A4

0137:004417F2 MOV EAX,[EBP-0C] ←④过了这一行,下命令D EAX将看到你的姓名。

0137:004417F5 LEA EDX,[EBP-08]

0137:004417F8 CALL 004416F8 ←⑤此CALL就是根据姓名计算序列号

0137:004417FD MOV EDX,[EBP-08] ←⑥将计算结果的地址放入EDX,此时D EDX能看到正确的序列号

0137:00441800 POP EAX

0137:00441801 CALL 00403B44

0137:00441806 JNZ 00441822 ←③此处如不跳转,则程序能跳过0441835的CALL,因此向上分析

0137:00441808 PUSH 00000040

0137:0044180A MOV ECX,0044186C

0137:0044180F MOV EDX,00441878

0137:00441814 MOV EAX,[00442C30]

0137:00441819 MOV EAX,[EAX]

0137:0044181B CALL 0043EEF4

0137:00441820 JMP 0044183A ←②这里可跳过下面的0137:00441835的CALL,再向上看看

0137:00441822 PUSH 00000010

0137:00441824 MOV ECX,00441884

0137:00441829 MOV EDX,0044188C

0137:0044182E MOV EAX,[00442C30]

0137:00441833 MOV EAX,[EAX]

0137:00441835 CALL 0043EEF4 ←①过了这一行,将出现Wrong Code的出错框。因此向上

看看何处能跳过此CALL

------------------------CRACKME6!CODE+???------------------------ 注意此处是crame的领空,领空名和你的程序名字相同。此例的程序名是Crackme6.exe

9、你可在0137:004417F2一行设断,将光标移到这一行,按F9或双击鼠标。(在TRW2000下双击鼠标无效,只能按F9),然后再次运行cracme程序,将会中断004417F2一行,再具体分析。因此从上面分析可知,在过了这一行0137:004417FD ,下命令D EDX将看到正确的序列号。(注:命令D是显示内存的数据)。

10、姓名:toye

序列号: 9074-04B7-F265-3F57

三、小结

通过这些讲解,我想大家基本能入门了,在掌握了一定基础知识以后,就要多练,才能快速掌握各种crack的技巧。大家可看看第6、7、8课后,再到11课练练序列号破解习题。另外初学者快到破解心得下载数十篇破解教学(errfree,heibow,jm,高春辉等经典之作 ) 看看。

三 : ActiveMQ入门实例

1.下载ActiveMQ

去官方网站下载:http://activemq.apache.org/

2.运行ActiveMQ

解压缩apache-activemq-5.5.1-bin.zip,然后双击apache-activemq-5.5.1\bin\activemq.bat运行ActiveMQ程序。(www.61k.com)

启动ActiveMQ以后,登陆:http://localhost:8161/admin/,创建一个Queue,命名为FirstQueue。

3.创建Eclipse项目并运行

创建project:ActiveMQ-5.5,并导入apache-activemq-5.5.1\lib目录下需要用到的jar文件,项目结构如下图所示:

activemq ActiveMQ入门实例

3.1.Sender.java

package com.xuwei.activemq;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class Sender {
private static final int SEND_NUMBER = 5;

public static void main(String[] args) {
// ConnectionFactory :连接工厂,JMS 用它创建连接
ConnectionFactory connectionFactory;
// Connection :JMS 客户端到JMS Provider 的连接
Connection connection = null;
// Session: 一个发送或接收消息的线程
Session session;
// Destination :消息的目的地;消息发送给谁.
Destination destination;
// MessageProducer:消息发送者
MessageProducer producer;
// TextMessage message;
// 构造ConnectionFactory实例对象,此处采用ActiveMq的实现jar
connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
"tcp://localhost:61616");
try {
// 构造从工厂得到连接对象
connection = connectionFactory.createConnection();
// 启动
connection.start();
// 获取操作连接
session = connection.createSession(Boolean.TRUE,
Session.AUTO_ACKNOWLEDGE);
// 获取session注意参数值xingbo.xu-queue是一个服务器的queue,须在在ActiveMq的console配置
destination = session.createQueue("FirstQueue");
// 得到消息生成者【发送者】
producer = session.createProducer(destination);
// 设置不持久化,此处学习,实际根据项目决定
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
// 构造消息,此处写死,项目就是参数,或者方法获取
sendMessage(session, producer);
session.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != connection)
connection.close();
} catch (Throwable ignore) {
}
}
}

public static void sendMessage(Session session, MessageProducer producer)
throws Exception {
for (int i = 1; i <= SEND_NUMBER; i++) {
TextMessage message = session
.createTextMessage("ActiveMq 发送的消息" + i);
// 发送消息到目的地方
System.out.println("发送消息:" + "ActiveMq 发送的消息" + i);
producer.send(message);
}
}
}

3.2.Receiver.java

package com.xuwei.activemq;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class Receiver {
public static void main(String[] args) {
// ConnectionFactory :连接工厂,JMS 用它创建连接
ConnectionFactory connectionFactory;
// Connection :JMS 客户端到JMS Provider 的连接
Connection connection = null;
// Session: 一个发送或接收消息的线程
Session session;
// Destination :消息的目的地;消息发送给谁.
Destination destination;
// 消费者,消息接收者
MessageConsumer consumer;
connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
"tcp://localhost:61616");
try {
// 构造从工厂得到连接对象
connection = connectionFactory.createConnection();
// 启动
connection.start();
// 获取操作连接
session = connection.createSession(Boolean.FALSE,
Session.AUTO_ACKNOWLEDGE);
// 获取session注意参数值xingbo.xu-queue是一个服务器的queue,须在在ActiveMq的console配置
destination = session.createQueue("FirstQueue");
consumer = session.createConsumer(destination);
while (true) {
//设置接收者接收消息的时间,为了便于测试,这里谁定为100s
TextMessage message = (TextMessage) consumer.receive(100000);
if (null != message) {
System.out.println("收到消息" + message.getText());
} else {
break;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {

扩展:activemq / mycat / activemq入门


if (null != connection)
connection.close();
} catch (Throwable ignore) {
}
}
}
}

4.注意事项

  1. 最后接收者跟发送者在不同的机器上测试
  2. 项目所引用的jar最后在ActiveMQ下的lib中找,这样不会出现版本冲突。

5.测试过程

因为是在单机上测试,所以需要开启两个eclipse,每一个eclipse都有自身的workspace。我们在eclipse1中运行Receiver,在eclipse2中运行Sender。

刚开始eclipse1中运行Receiver以后console介面没有任何信息,在eclipse2中运行Sender以后,eclipse2中的console显示如下信息:

发送消息:ActiveMq 发送的消息1
发送消息:ActiveMq 发送的消息2
发送消息:ActiveMq 发送的消息3
发送消息:ActiveMq 发送的消息4
发送消息:ActiveMq 发送的消息5

而回到eclipse1中发现console界面出现如下信息:

收到消息ActiveMq 发送的消息1
收到消息ActiveMq 发送的消息2
收到消息ActiveMq 发送的消息3
收到消息ActiveMq 发送的消息4
收到消息ActiveMq 发送的消息5

 PS:2012-2-27

今天发现测试并不需要开启两个eclipse,在一个eclipse下页可以启动多个程序,并且有多个console,在上面的Receiver.java中,设置一个较大的时间,比如receive(500000),如下代码所示:

TextMessage message = (TextMessage) consumer.receive(500000);

这个时候运行Receiver.java的话,会使得这个Receiver.java一直运行500秒,在eclipse中可以发现:

activemq ActiveMQ入门实例

点击那个红色方块可以手动停止运行程序。

运行玩receiver以后我们在运行sender,在运行完sender以后,我们要切换到receiver的console,如下图所示:

activemq ActiveMQ入门实例

扩展:activemq / mycat / activemq入门

四 : Photoshop入门:动作的安装使用实例

前面讲述了Photoshop入门:下载的笔刷如何使用?,继续讲解网上下载的一些动作如何应用呢?
相关教程:Photoshop入门:动作(Action)安装和使用。
1,首先打开动作面板点右边的下拉菜单如图1,选择载入动作

<图1>
2,选择要载入的动作文件

<图2>
3,载入后我们就可以在动作面板下面找到刚才载入的动作。

<图3>
4,打开我们要加动作的图片,然后选择动作如图4所示

<图4>
5,点面板下面的开始按钮如图5,就可以看到效果图了。

<图5>

<图6>
本文标题:入门实例-UI入门实例做一个个性的播放器
本文地址: http://www.61k.com/1125279.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1