利用JML开发的一个小例子,附详细注释。有问题的地方希望大家能帮我提出来,呵呵
/**//*
*msntest.java
*
*Createdon2007年4月11日,下午1:40
*
*Tochangethistemplate,chooseTools|TemplateManager
*andopenthetemplateintheeditor.
*/
packagejavamsn;
importjava.text.SimpleDateFormat;
importjava.util.Date;
importnet.sf.jml.MsnContact;
importnet.sf.jml.MsnList;
importnet.sf.jml.MsnMessenger;
importnet.sf.jml.MsnProtocol;
importnet.sf.jml.MsnSwitchboard;
importnet.sf.jml.MsnUserStatus;
importnet.sf.jml.event.MsnAdapter;
importnet.sf.jml.impl.MsnContactImpl;
importnet.sf.jml.impl.MsnMessengerFactory;
importnet.sf.jml.message.MsnControlMessage;
importnet.sf.jml.message.MsnDatacastMessage;
importnet.sf.jml.message.MsnInstantMessage;
importnet.sf.jml.message.MsnSystemMessage;
importnet.sf.jml.message.MsnUnknownMessage;
/***//**
*欢迎装载,但请说明出处
*@authorzhappy
*/
publicclassmsntestextendsMsnAdapter...{
privateMsnMessengermessenger=null;
privateStringemail=null,password=null;
/***//**Createsanewinstanceofmsntest*/
publicmsntest()...{
}
publicstaticvoidmain(Stringargs[])
throwsClassNotFoundException,InstantiationException,IllegalAccessException...{
msntestmsn=(msntest)Class.forName("javamsn.msntest").newInstance();//创建类实例
msn.setEmail("throbot@msn.com");//设置登录用户
msn.setPassword("01234567890");//设置密码
msn.start();
}
//打印信息
privatestaticvoidmsg(Objectobj)...{
SimpleDateFormatsdf=newSimpleDateFormat("MM-ddHH:mm");
if(objinstanceofThrowable)
System.err.println("["+sdf.format(newDate())+"]"+obj);
else
System.out.println("["+sdf.format(newDate())+"]"+obj);
}
privatevoidstart()...{
messenger=MsnMessengerFactory.createMsnMessenger(email,password);//创建MsnMessenger
messenger.setSupportedProtocol(newMsnProtocol[]...{MsnProtocol.MSNP12});//设置登录协议
messenger.getOwner().setInitStatus(MsnUserStatus.ONLINE);//设置用户状态
messenger.addListener(this);//注册事件
messenger.login();//登录
}
//收到正常信息的时候发生
publicvoidinstantMessageReceived(MsnSwitchboardswitchboard,
MsnInstantMessagemessage,MsnContactcontact)...{
msg(contact.getDisplayName()+"对我说:"+message.getContent());
//如果聊天内容为exit,退出
if(message.getContent().trim().equalsIgnoreCase("exit"))...{
msg(contact.getDisplayName()+"对我发出退出指令。");
messenger.logout();
System.exit(0);
}
message.setContent("Hello,I'mrobot!");//设置要发送消息内容
message.setFontRGBColor((int)(Math.random()*255*255*255));//设置消息的文本颜色
switchboard.sendMessage(message);//发送信息
}
//收到系统信息的时候发生,登录时
publicvoidsystemMessageReceived(MsnMessengermessenger,
MsnSystemMessagemessage)...{
//msg(messenger+"recvsystemmessage"+message);
}
//当在联系人聊天窗口获得光标并按下第一个键时发生
publicvoidcontrolMessageReceived(MsnSwitchboardswitchboard,
MsnControlMessagemessage,MsnContactcontact)...{
msg(contact.getFriendlyName()+"正在输入文字。");
}
//异常时发生
publicvoidexceptionCaught(MsnMessengermessenger,Throwablethrowable)...{
msg(messenger+throwable.toString());
msg(throwable);
}
//登录完成时发生
publicvoidloginCompleted(MsnMessengermessenger)...{
msg(messenger.getOwner().getDisplayName()+"登录成功!");
//messenger.getOwner().setDisplayName("天天持之以恒");
}
//注销时发生
publicvoidlogout(MsnMessengermessenger)...{
msg(messenger+"logout");
}
//收到系统广播信息时发生
publicvoiddatacastMessageReceived(MsnSwitchboardswitchboard,
MsnDatacastMessagemessage,MsnContactfriend)...{
msg(switchboard+"recvdatacastmessage"+message);
switchboard.sendMessage(message,false);
}
//收到目前不能处理的信息时发生
publicvoidunknownMessageReceived(MsnSwitchboardswitchboard,
MsnUnknownMessagemessage,MsnContactfriend)...{
//msg(switchboard+"recvunknownmessage"+message);
}
publicvoidcontactListInitCompleted(MsnMessengermessenger)...{
listContacts();
}
/***//**
*更新好友列表完成时发生
*/
publicvoidcontactListSyncCompleted(MsnMessengermessenger)...{
listContacts();
}
/***//**
*关闭一个聊天窗口时发生
*/
publicvoidswitchboardClosed(MsnSwitchboardswitchboard)...{
msg("switchboardStarted"+switchboard);
}
/***//**
*打开一个聊天窗口时发生
*/
publicvoidswitchboardStarted(MsnSwitchboardswitchboard)...{
msg("switchboardStarted"+switchboard);
}
//打印联系人
privatevoidlistContacts()...{
MsnContact[]cons=messenger.getContactList().getContactsInList(MsnList.AL);
if(cons.length==0)
msg("空");
else
msg("你现在有"+cons.length+"个联系人");
for(inti=0;i<cons.length;i++)...{
Stringpersonal=((MsnContactImpl)cons[i]).getPersonalMessage().equals("")
?"空":((MsnContactImpl)cons[i]).getPersonalMessage();
msg(cons[i].getDisplayName()+""+cons[i].getEmail()+""
+cons[i].getStatus()+""+personal);
}
}
publicStringgetEmail()...{
returnemail;
}
publicvoidsetEmail(Stringemail)...{
this.email=email;
}
publicStringgetPassword()...{
returnpassword;
}
publicvoidsetPassword(Stringpassword)...{
this.password=password;
}
}
分享到:
相关推荐
JML的目标是为开发者提供一个方便的接口,让他们能够快速地开发基于MSN协议的聊天应用。 **源码分析:** JML的源码通常包括多个Java类和接口,这些类和接口实现了MSN协议的不同部分,如登录、发送消息、接收消息、...
2. **工具** - JML作为一个开发工具,帮助程序员快速构建MSN机器人的应用程序。 **详细知识解析:** 1. **MSN Messenger**:MSN Messenger是微软公司推出的一款即时通讯软件,它允许用户进行文字聊天、语音通话、...
首先,"jml-0.9.3.zip"这个压缩包中包含的JML全称为Java Message Library,它是一个旨在简化JMS(Java Message Service)消息路由和转换的库。JMS是Java平台上的一个标准接口,用于在分布式环境中进行异步通信。通过...
总结来说,Jml插件是一个帮助开发者获取和管理MSN好友列表的工具,它基于Java语言,利用MSN的通讯协议进行工作。通过学习和使用Jml,开发者不仅可以掌握网络编程和协议解析的基本技能,还能了解到如何通过开源项目...
"jml-src-1.0b4" 是一个开源项目,其主要目的是提供Java语言对MSN Messenger服务的接口和操作支持。这个项目的源代码库包含了多个目录,每个目录都有特定的功能和用途,使得开发者能够更好地理解和使用这个库来构建...
总的来说,面向对象JML系列第一次指导书1为读者提供了JML的基础知识,展示了如何在Java类和接口中使用JML注释来规范行为,并给出了一个简单的 `Path` 和 `PathContainer` 的示例。理解并掌握JML,对于编写更可靠、可...
JML,全称为"jml-一个有用的webcloud最小unikernel分布式操作系统",是一种专注于Web服务的轻量级、高效的分布式操作系统。Unikernel是一种新兴的操作系统模型,它构建于微内核之上,仅包含运行特定应用程序所需的...
同样,它也需要一个公共构造函数来创建一个空的社交网络。`Runner`类也会利用这个构造函数来实例化`Network`对象。 作业的测试模式采用黑箱测试,包括公测、互测和bug修复阶段。这意味着学生的代码会被一系列未知的...
面向对象JML系列第三次代码作业指导书1主要涵盖了如何基于给定的接口和JML规格实现一个社交关系模拟系统的任务。JML(Java Modeling Language)是一种形式化语言,用于描述软件系统的规格,确保代码实现与需求一致。...
【面向对象JML系列第二次指导书1】是一个关于软件开发的作业指导,主要涉及的知识点包括JML规格的深入理解与应用、设计模式的实践、以及单元测试的初步使用。这次作业的目标是实现两个类——Path和Graph,它们分别...
面向对象JML系列第二次代码作业主要要求学生实现一个社交关系模拟系统的各个组件,包括Person、Network和Group。作业的核心是理解和实现官方提供的接口,并确保代码符合JML(Java Modeling Language)规格。 首先,...
【面向对象JML系列第三次指导书1】是一个关于软件开发的作业指导,主要涉及的知识点包括JML规格的深入理解与应用、设计模式的实践以及单元测试的进阶技巧。作业要求学生实现两个核心类:Path和RailwaySystem,以此...
在提供的压缩包中,`openjml.jar`是OpenJML工具的实现,它是一个JML的编译器插件,可以与标准Java编译器配合使用,进行契约检查。 5. **文档生成**:JML的规格可以用作自动生成文档的源,这对于理解和维护代码非常...
VDM_JML转换方法的研究及其在开发过程中的应用 面向对象的形式化方法
首次构建系统可能需要长达一个小时的时间。 随后的构建将更快(不到一分钟)。 在虚拟环境中时,/ vagrant目录将与此项目同步,因此对/ vagrant目录的任何更改都将在主机中感觉到。 如果您具有64位Linux系统,则...
这包含在 Make 之上的一个薄层,允许构建更复杂的项目。 命令保留在 Makefile 中,因此不需要额外的工具。 它主要针对 C++ 项目。 它支持以下内容: 非递归修改递归子目录 c/c++/fortran 文件的依赖跟踪 编译器...