一 : UI入门实例做一个个性的播放器
今天在网上看到了一个播放器的实例教程,感觉很不错,很适合UI入门新手练习,发来给大家看看,一起学习啊,好了废话不说了,开始学习吧:
最终效果图
1.新建一个文件,图象大小设置为200X200象素,72DIP,白色背景,RGB模式,.新建图层1,选择椭圆选框工具在图象中拉一个椭圆的选区出来
2.选择渐变填充工具,渐变样式选择‘径向’渐变,并将渐变色作如下图般设置,从选区的左上角向选区的右下角拖动鼠标来填充选区
3.用鼠标双击图层1,在图层样式面板中钩选投影、内阴影、外发光,投影参数不作设置,按默认样式,将内阴影的不透明度降低至20%,距离设置为0个象素,阻塞保持0%,大小设置为2个象素;再将内发光的不透明速降低至15%,发光色也设置为白色,其它不变
4.新建图层2,选择椭圆渐变工具,按住SHIFT在前一个椭圆的范围内拉一个正圆的选区,再选择渐变填充工具,依然是前一次用的渐变色,简便样式也同样是‘径向’渐变,从正圆选区的左上角(圆形以外)到有右下角(圆形以内)拖动鼠标来填充渐变色
5.用鼠标双击图层2,在图层样式面板中钩选投影、内阴影、外发光效果,将投影的距离设置为0个象素,扩展为0%,大小设置为8个象素,其它不变;将内阴影的距离设置为0个象素,阻塞为0%,大小为5个象素,其它不变;再将外发光的发光色更改为白色,扩展为0%,大小设置为8个象素,其它不变。完成后再执行菜单-图象-调整-亮度对比度,将亮度设置为10,对比度设置为50
6.新建图层3,选择椭圆选框工具,按住SHIFT在前一个制作的圆形的中间靠左的位置拉一个正圆的选区,将前景色设置为R:145、G:165、B:125,填充选区
7.用鼠标双击图层3,在图层样式面板中钩选投影、内阴影、内发光效果,将投影的距离跟大小都设置为6个象素,其它不变;再将内阴影的不透明度设置为100%,距离设置为0个象素,阻塞设置为16%,大小设置为5个象素,等高线选择第二排第五种样式;再将内发光的发光色更改为白色,然后将扩展的数值更改为18%,大小更改为8个象素,其它不变
8.下面来做液晶屏内的有机层面表现出来。当前图层定在图层3,执行菜单-滤镜-杂色-添加杂色,将数量设置为1%,选择平均分布 ,并钩选‘单色’选项。完成后再执行菜单-滤镜-渲染-光照效果,将光照参数作如(图9)般设置。完成后效果如
9.好了,屏幕差不多就这样完成了,下面要做的是液晶屏幕上的图案及文字。将前景色设置为黑色,用文字输入工具在在图层3的上面输入文字88-88,并可用自由变换命令将文字缩放到适当大小,完成后用鼠标双击此图层,将图层的混合模式更改为柔光,再在图层样式面板中钩选斜面和浮雕效果,将浮雕的深度设置为1%,大小跟软化都设置为0个象素,其它不变,并将此图层的不透明度更改为50%
10.将文字图层复制一个置于图层的最顶层,将图层的混合模式改为叠加,并取消斜面和浮雕效果的设置,并将图层的不透明度更改为100%,再用文字输入工具,将此行文字修改为别的数字或字母
11.文字完成了,下面再来为液晶
屏加一些小图标,在两个文字图层的上面新建图层4,用矩形选矿工具在画面上框一个横向的宽度为1个象素的矩形选区,填充为黑色,将此黑线条垂直等距离的复制几份,再将所有黑线条的图层合并,再用矩形选框工具框选不要的部分,将其删除
12.将图层4的混合模式更改为柔光,再将图层4复制一份为图层4副本,用矩形选框工具,将一些黑色线条的块框选后删除,来表达出音乐播放时节奏灯的跳动状
13.如想再做点别的图案或文字上去的话,方法还是相同的,自己想象啦
14.将图层1、2、3连接,执行菜单-编辑-自由变换,将连接的播放器的3个底层图案旋转个角度,这样看上去的播放器就不那么死板了
15.在图层面板的最顶层新建一个图层,按住CTRL点击液晶显示屏的图层,使其选区浮起,执行菜单-选择-修改-收缩,将选区收缩3个象素,再选择椭圆选框工具,按住SHIFT+ALT后框选圆形选区的左上部分,这样选能将不需要的右下部分的选区直接去除
16.在选择渐变填充工具,渐变样式选择线性样式,再将渐变色的左右端的颜色都设置为白色,并将右端颜色的不透明度设置为0,在选区中从右下角至左上角拉动鼠标来填充选区
17.下来为播放器加两个简单的按钮,在图层面板的最顶端新建一个图层,用钢笔工具,沿着图层1中播放器底层椭圆的右下部分的弧度勾画出一个回旋标式的轮廓(图19),将路径转换为选区,到图层1中将选区中的部分复制,并粘贴到新建的图层中
18.双击此图层,在图层样式面板中钩选投影、内发光及斜面和浮雕效果,将投影的距离设置为0个象素,大小设置为4个象素,再将投影的等高线更 改为第二排第四种样式,其它不变;再将内发光的发光色设置为白色,其它不变;将斜面和浮雕中的大小设置为2个象素,软化设置为3个象素,并将等高线样式更 改为第二排第三种样式,其它按默认设置,不做更改。完成后将图层的混合模式更改为正片叠底
19.执行菜单-图象-调整-亮度/对比度,将亮度的数值调节至最高,再用多边形套索工具框选出按钮的中间分割部分,并将选中部分删除
20.完成后再在图层面板的最上层新建一个图层,选择铅笔工具,将画笔大小设置为1个象素,前景色设置为黑色,在按钮上画两个小图标
21.用鼠标双击小图标的图层,钩选投影、内发光、斜面和浮雕效果。将投影的距离跟扩展都设置为0,大小设置为2个象素,并将等高线样式更改为第一排第三种样式,其它不变;再将内发光的发光色更改为白色,其它不作设置;将斜面和浮雕中的样式更改为外斜面,其它不变
22.好了,按钮也完成了,这个简单的微型播放器也就可以告一段落了,对颜色不满的话可以通过调节菜单-图象中的色彩平衡(CTRL+B)和色相/饱和度(CTRL+U),或者曲线命令(CTRL+M),也可以用渐变映射命令(ALT-I-M)来调整
好了教程到这里就结束了,这个实例感觉,很适合新手,只要大家认真做,应该都可以做出来的.希望三联教程提供的教程对大家有帮助哦!
二 : 从一实例入门
从一实例入门
本节有大侠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文件,项目结构如下图所示:
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.注意事项
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中可以发现:
点击那个红色方块可以手动停止运行程序。
运行玩receiver以后我们在运行sender,在运行完sender以后,我们要切换到receiver的console,如下图所示:
扩展:activemq / mycat / activemq入门
四 : Photoshop入门:动作的安装使用实例
前面讲述了Photoshop入门:下载的笔刷如何使用?,继续讲解网上下载的一些动作如何应用呢?61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1