文章分类:Java编程
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 说明.
分享到:
相关推荐
jml-src-1.0b4 java操作msn的源码
JML19_G070_V10104_221212
JML(Java Modeling Language)是用于对Java程序进行规格化设计的一种表示语言。JML是一种行为接口规格语言 (Behavior Interface Specification Language,BISL),基于Larch方法构建。BISL提供了对方法和类型的规格...
OpenJUMP 试点项目-Java 统一制图平台 OpenJUMP 是“Java 统一制图平台”GIS 软件 JUMP 的社区驱动分支。最初的 JUMP 由 Vivid Solutions 开发,于 2003 年在 GPL2 下发布 特征 矢量 GIS(也可以读取栅格) 提供...
java实现的msn机器人,可以自动应答,主动邀请,主动接受邀请。函数库实现msn所有功能
NULL 博文链接:https://zhouxianglh.iteye.com/blog/614561
java msn 实现接口jar包 Java MSN 实现msn发信息
NULL 博文链接:https://mengqingyu.iteye.com/blog/408214
guiceyloops.zip,jml:简化jms消息路由和转换的库guiceylops是一个极简的库,用于帮助使用guice测试jee应用程序。
Java 建模语言 (JML) 是一种行为接口规范语言,可用于指定 Java 模块的行为(如契约设计——DBC)。 它有许多工具可以进行断言检查、单元测试等。
本系统通过java jml 实现msn功能 并且可以自动聊天 jml的jar包需要你自己去下载 需要三个 cindy.jar commons-logging.jar junit.jar
NULL 博文链接:https://asivy.iteye.com/blog/1006353
用于智能卡的 Java Card 应用程序原型及其客户端应用程序。 它是在 JML(Java 建模语言)的支持下开发的,用于正式指定在 Java Card 中开发 HealthCard 应用程序的要求。
从VDM-SL到JML建模的转换策略,靳丹,杨宗源,VDM是一种广泛应用于工业界的形式化开发方法,数学的精确性使它能够有效地保证系统的设计和开发。JML是基于Java的形式化的行为接口��
jml-build jml构建系统 这包含在 Make 之上的一个薄层,允许构建更复杂的项目。 命令保留在 Makefile 中,因此不需要额外的工具。 它主要针对 C++ 项目。 它支持以下内容: 非递归修改递归子目录 c/c++/fortran ...
Roy Tsang开发的基于Java Msn Lib(JML)的Web msn客户端。 您可以通过gmail dot com的roy dot cstsang与我联系。
jml:jml-一个有用的webcloud最小unikernel分布式操作系统
JML是一个支持MSNP8-MSNP15的Java Msn Messenger库。 它针对多个用户进行了优化,旨在使其易于遵循和使用。