|
http://kenter1643./blog/306649 的资料给了极大的帮助
1 JML 下载地址:http:///projects/java-jml/ 2 JML 相关地址:http:///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 说明. |
|
|