http://kenter1643.iteye.com/blog/306649 的资料给了极大的帮助
1 JML 下载地址:http://sourceforge.net/projects/java-jml/
2 JML 相关地址:http://sourceforge.net/apps/trac/java-jml
3 代码. 请注意 173,174,175行.为指定用户发送消息.和之前代码78行多了窗口关闭。
package com.isw2.msn;
import java.text.SimpleDateFormat;
import java.util.Date;
import net.sf.jml.MsnContact;
import net.sf.jml.MsnList;
import net.sf.jml.MsnMessenger;
import net.sf.jml.MsnProtocol;
import net.sf.jml.MsnSwitchboard;
import net.sf.jml.MsnUserStatus;
import net.sf.jml.event.MsnAdapter;
import net.sf.jml.impl.MsnContactImpl;
import net.sf.jml.impl.MsnMessengerFactory;
import net.sf.jml.message.MsnControlMessage;
import net.sf.jml.message.MsnDatacastMessage;
import net.sf.jml.message.MsnInstantMessage;
import net.sf.jml.message.MsnSystemMessage;
import net.sf.jml.message.MsnUnknownMessage;
/**
* @author isw2 zx
*/
public class Msntest extends MsnAdapter {
private MsnMessenger messenger = null;
private String email = null, password = null;
/** Creates a new instance of Msntest */
public Msntest() {
}
public static void main(String args[]) throws ClassNotFoundException,
InstantiationException, IllegalAccessException {
Msntest msn = (Msntest) Class.forName("com.isw2.msn.Msntest")
.newInstance();// 创建类实例
msn.setEmail("zhouxianglh@gmail.com");// 设置登录用户
msn.setPassword("123456");// 设置密码
msn.start();
}
// 打印信息
private static void msg(Object obj) {
SimpleDateFormat sdf = new SimpleDateFormat("MM-dd HH:mm");
if (obj instanceof Throwable) {
System.err.println("[" + sdf.format(new Date()) + "] " + obj);
} else {
System.out.println("[" + sdf.format(new Date()) + "] " + obj);
}
}
private void start() {
messenger = MsnMessengerFactory.createMsnMessenger(email, password);// 创建MsnMessenger
messenger
.setSupportedProtocol(new MsnProtocol[] { MsnProtocol.MSNP12 });// 设置登录协议
messenger.getOwner().setInitStatus(MsnUserStatus.ONLINE);// 设置用户状态
messenger.addListener(this);// 注册事件
messenger.login();// 登录
}
// 收到正常信息的时候发生
@Override
public void instantMessageReceived(MsnSwitchboard switchboard,
MsnInstantMessage message, MsnContact contact) {
System.out.println(switchboard.getClass());
msg(contact.getDisplayName() + "对我说:" + message.getContent());
// 如果聊天内容为exit,退出
if (message.getContent().trim().equalsIgnoreCase("exit")) {
msg(contact.getDisplayName() + "对我发出退出指令。");
messenger.logout();
System.exit(0);
}
message.setDisplayName("isw2 msn");//信息发送者昵称
message.setContent("当前时用户" + contact.getEmail());// 设置要发送消息内容
message.setFontRGBColor((int) (Math.random() * 255 * 255 * 255));// 设置消息的文本颜色
messenger.getOwner().setDisplayName("isw2 msn online");//聊天框标题
switchboard.sendMessage(message);// 发送信息
switchboard.close();// 关闭对话框
}
// 收到系统信息的时候发生,登录时
@Override
public void systemMessageReceived(MsnMessenger messenger,
MsnSystemMessage message) {
// msg(messenger + " recv system message " + message);
}
// 当在联系人聊天窗口获得光标并按下第一个键时发生
@Override
public void controlMessageReceived(MsnSwitchboard switchboard,
MsnControlMessage message, MsnContact contact) {
msg(contact.getFriendlyName() + "正在输入文字。");
}
// 异常时发生
@Override
public void exceptionCaught(MsnMessenger messenger, Throwable throwable) {
msg(messenger + throwable.toString());
msg(throwable);
}
// 登录完成时发生
@Override
public void loginCompleted(MsnMessenger messenger) {
msg(messenger.getOwner().getDisplayName() + "登录成功!");
}
// 注销时发生
@Override
public void logout(MsnMessenger messenger) {
msg(messenger + " logout");
}
// 收到系统广播信息时发生
@Override
public void datacastMessageReceived(MsnSwitchboard switchboard,
MsnDatacastMessage message, MsnContact friend) {
msg(switchboard + " recv datacast message " + message);
switchboard.sendMessage(message, false);
}
// 收到目前不能处理的信息时发生
@Override
public void unknownMessageReceived(MsnSwitchboard switchboard,
MsnUnknownMessage message, MsnContact friend) {
// msg(switchboard + " recv unknown message " + message);
}
@Override
public void contactListInitCompleted(MsnMessenger messenger) {
listContacts();
}
/**
* 更新好友列表完成时发生
*/
@Override
public void contactListSyncCompleted(MsnMessenger messenger) {
listContacts();
}
/**
* 关闭一个聊天窗口时发生
*/
@Override
public void switchboardClosed(MsnSwitchboard switchboard) {
msg("switchboardStarted " + switchboard);
}
/**
* 打开一个聊天窗口时发生
*/
@Override
public void switchboardStarted(MsnSwitchboard switchboard) {
msg("switchboardStarted " + switchboard);
}
// 打印联系人
private void listContacts() {
MsnContact[] cons = messenger.getContactList().getContactsInList(
MsnList.AL);
if (cons.length == 0) {
msg("空");
} else {
msg("你现在有" + cons.length + "个联系人");
}
for (int i = 0; i < cons.length; i++) {
String personal = ((MsnContactImpl) cons[i]).getPersonalMessage()
.equals("") ? "空" : ((MsnContactImpl) cons[i])
.getPersonalMessage();
msg(cons[i].getDisplayName() + " " + cons[i].getEmail() + " "
+ cons[i].getStatus() + " " + personal);
if (cons[i].getStatus().equals(MsnUserStatus.ONLINE)) {//给在线好友发送消息
messenger.getOwner().setDisplayName("isw2 msn");
messenger.sendText(cons[i].getEmail(), "你好,isw2 msn上线了");
}
}
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
testMSN\lib 下面除了 Jar 包,还有源代码,里面有API 说明.
分享到:
相关推荐
JavaMSN机器人是一个基于Java...通过学习以上知识点,并结合项目提供的源代码,你可以深入了解如何用Java构建一个MSN机器人,包括如何使用第三方库,如何处理网络通信,以及如何设计和实现一个带图形界面的聊天应用。
《Jml插件获取MSN好友列表详解》 在信息技术领域,交流与合作是至关重要的,而即时通讯工具如MSN(Microsoft Network)曾是人们日常工作中不可或缺的一部分。在MSN盛行的时代,开发者们为了满足用户需求,编写了...
java实现的msn机器人,可以自动应答,主动邀请,主动接受邀请。函数库实现msn所有功能
**标题:“用JML实现的一个MSN客户端一”** 在标题中提到的“JML”全称为Java Messenger Library,是一个开源的Java库,用于构建MSN(Microsoft Messenger)客户端应用。MSN客户端是微软公司早期推出的即时通讯软件...
"jml-src-1.0b4" 是一个开源项目,其主要目的是提供Java语言对MSN Messenger服务的接口和操作支持。这个项目的源代码库包含了多个目录,每个目录都有特定的功能和用途,使得开发者能够更好地理解和使用这个库来构建...
例如,它可能提供了一种声明式的方式来定义消息路由规则,使得复杂的业务逻辑可以通过简单的配置来实现,同时支持动态更新,以适应不断变化的需求。 其次,"guiceyloops.zip"中的GuiceyLoops则是一个极简的库,专门...
`MyJmsnClient.java`是一个简单的实现,展示了如何使用JML库进行MSN Messenger的基本操作,如登录、发送和接收消息、添加好友等。以下是关键代码片段的解释: 1. 类定义:`MyJmsnClient`类是主客户端类,它持有MSN ...
总的来说,面向对象JML系列第一次指导书1为读者提供了JML的基础知识,展示了如何在Java类和接口中使用JML注释来规范行为,并给出了一个简单的 `Path` 和 `PathContainer` 的示例。理解并掌握JML,对于编写更可靠、可...
- **JML (Java Msn Manager Library)**:这是一个专注于MSN通讯管理的Java库。相较于Openfire,JML对MSN的支持更为优化,且使用起来更为简便。 本篇文档将详细介绍如何使用JML来实现导入指定MSN账号的好友列表,并...
虽然指导书中并未详细说明具体使用哪种设计模式,但提到“设计模式的简单实战”,这意味着你需要在实现Path和Graph类时,可能需要考虑如何有效地组织代码结构,例如可能使用工厂模式来创建Path和Graph对象,或者...
面向对象JML系列第三次代码作业指导书1主要涵盖了如何基于给定的接口和JML规格实现一个社交关系模拟系统的任务。JML(Java Modeling Language)是一种形式化语言,用于描述软件系统的规格,确保代码实现与需求一致。...
jml-build jml构建系统 这包含在 Make 之上的一个薄层,允许构建更复杂的项目。 命令保留在 Makefile 中,因此不需要额外的工具。 它主要针对 C++ 项目。 它支持以下内容: 非递归修改递归子目录 c/c++/fortran ...
面向对象JML系列第二次代码作业主要要求学生实现一个社交关系模拟系统的各个组件,包括Person、Network和Group。作业的核心是理解和实现官方提供的接口,并确保代码符合JML(Java Modeling Language)规格。 首先,...
【面向对象JML系列第三次指导书1】是一个关于软件开发的作业指导,主要涉及的知识点包括JML规格的深入理解与应用、设计模式的实践以及单元测试的进阶技巧。作业要求学生实现两个核心类:Path和RailwaySystem,以此...
VDM_JML转换方法的研究及其在开发过程中的应用 面向对象的形式化方法