这样获取列表还存在着一个问题,就是每当运行服务的时候他不会自动停止,运行完毕还保持开启状态,这样的话每当运行一次就会多开启一个服务,哪位朋友要是知道怎样解决请留下联系方式。
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 kenter
*/
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("Msntest").newInstance();//创建类实例
msn.setEmail("");//设置登录用户
msn.setPassword("");//设置密码
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) {
msg(contact.getDisplayName() + "对我说:" + message.getContent());
//如果聊天内容为exit,退出
if (message.getContent().trim().equalsIgnoreCase("exit")) {
msg(contact.getDisplayName() + "对我发出退出指令。");
messenger.logout();
System.exit(0);
}
message.setContent("Hello,I'm robot!");//设置要发送消息内容
message.setFontRGBColor((int) (Math.random() * 255 * 255 * 255));//设置消息的文本颜色
switchboard.sendMessage(message);//发送信息
}
//收到系统信息的时候发生,登录时
@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() + "登录成功!");
//messenger.getOwner().setDisplayName("天天持之以恒");
}
//注销时发生
@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);
}
}
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;
}
}
以下是代码示例附带jar包
分享到:
相关推荐
**标题:“JML 简单的MSN 机器人”** **描述:** “JML(Java Messenger Library)是一个用于创建MSN机器人的开源库。通过这个库,开发者可以编写程序来模拟用户行为,实现自动化交流或者特定功能的MSNMessenger...
它提供了丰富的API,使得开发者可以轻松地处理MSN相关的任务,例如登录、获取联系人列表、发送消息等。 **2.2 安装与配置** 为了使用JML,首先需要下载其最新版本的jar包。可以通过访问官方网站或者GitHub等开源...
4. **Event处理模块**:监听并处理MSN服务器发送的各种事件,如新消息通知、好友上线或下线等。 5. **Presence模块**:处理在线状态的更新和显示。 6. **Security模块**:处理加密和安全相关的问题,确保通信的安全...
java实现的msn机器人,可以自动应答,主动邀请,主动接受邀请。函数库实现msn所有功能
"jml-src-1.0b4" 是一个开源项目,其主要目的是提供Java语言对MSN Messenger服务的接口和操作支持。这个项目的源代码库包含了多个目录,每个目录都有特定的功能和用途,使得开发者能够更好地理解和使用这个库来构建...
《JML与GuiceyLoops在开源项目中的应用》 在开源软件的世界里,工具和库的多样性为开发者提供了无限可能。今天我们要探讨的是"jml-0.9.3.zip"和"guiceyloops.zip"这两个开源项目,它们在Java开发中扮演着重要的角色...
`MyJmsnClient.java`是一个简单的实现,展示了如何使用JML库进行MSN Messenger的基本操作,如登录、发送和接收消息、添加好友等。以下是关键代码片段的解释: 1. 类定义:`MyJmsnClient`类是主客户端类,它持有MSN ...
jml-build jml构建系统 这包含在 Make 之上的一个薄层,允许构建更复杂的项目。 命令保留在 Makefile 中,因此不需要额外的工具。 它主要针对 C++ 项目。 它支持以下内容: 非递归修改递归子目录 c/c++/fortran ...
【面向对象JML系列第二次指导书1】是一个关于软件开发的作业指导,主要涉及的知识点包括JML规格的深入理解与应用、设计模式的实践、以及单元测试的初步使用。这次作业的目标是实现两个类——Path和Graph,它们分别...
面向对象JML系列第一次指导书1是针对Java编程语言中的一种特定规范——JML(Java Modeling Language)的介绍。JML是一种形式化的方法,用于指定Java程序的行为,它提供了更精确的语义描述,帮助开发者编写更健壮、可...
在提供的压缩包中,`openjml.jar`是OpenJML工具的实现,它是一个JML的编译器插件,可以与标准Java编译器配合使用,进行契约检查。 5. **文档生成**:JML的规格可以用作自动生成文档的源,这对于理解和维护代码非常...
面向对象JML系列第三次代码作业指导书1主要涵盖了如何基于给定的接口和JML规格实现一个社交关系模拟系统的任务。JML(Java Modeling Language)是一种形式化语言,用于描述软件系统的规格,确保代码实现与需求一致。...
VDM_JML转换方法的研究及其在开发过程中的应用 面向对象的形式化方法
面向对象JML系列第二次代码作业主要要求学生实现一个社交关系模拟系统的各个组件,包括Person、Network和Group。作业的核心是理解和实现官方提供的接口,并确保代码符合JML(Java Modeling Language)规格。 首先,...
【面向对象JML系列第三次指导书1】是一个关于软件开发的作业指导,主要涉及的知识点包括JML规格的深入理解与应用、设计模式的实践以及单元测试的进阶技巧。作业要求学生实现两个核心类:Path和RailwaySystem,以此...
java msn 实现接口jar包 Java MSN 实现msn发信息