http://kenter1643.javaeye.com/blog/306649 的資料給了極大的幫助
1 JML 下載地址:http://sourceforge.net/projects/java-jml/
2 JML 相關(guān)地址:http://sourceforge.net/apps/trac/java-jml
3 代碼. 請(qǐng)注意 173,174,175行.為指定用戶發(fā)送消息.和之前代碼78行多了窗口關(guān)閉。
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();// 創(chuàng)建類實(shí)例msn.setEmail("zhouxianglh@gmail.com");// 設(shè)置登錄用戶msn.setPassword("123456");// 設(shè)置密碼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);// 創(chuàng)建MsnMessengermessenger.setSupportedProtocol(new MsnProtocol[] { MsnProtocol.MSNP12 });// 設(shè)置登錄協(xié)議messenger.getOwner().setInitStatus(MsnUserStatus.ONLINE);// 設(shè)置用戶狀態(tài)messenger.addListener(this);// 注冊(cè)事件messenger.login();// 登錄}// 收到正常信息的時(shí)候發(fā)生@Overridepublic void instantMessageReceived(MsnSwitchboard switchboard,MsnInstantMessage message, MsnContact contact) {System.out.println(switchboard.getClass());msg(contact.getDisplayName() + "對(duì)我說(shuō):" + message.getContent());// 如果聊天內(nèi)容為exit,退出if (message.getContent().trim().equalsIgnoreCase("exit")) {msg(contact.getDisplayName() + "對(duì)我發(fā)出退出指令。");messenger.logout();System.exit(0);}message.setDisplayName("isw2 msn");//信息發(fā)送者昵稱message.setContent("當(dāng)前時(shí)用戶" + contact.getEmail());// 設(shè)置要發(fā)送消息內(nèi)容message.setFontRGBColor((int) (Math.random() * 255 * 255 * 255));// 設(shè)置消息的文本顏色messenger.getOwner().setDisplayName("isw2 msn online");//聊天框標(biāo)題switchboard.sendMessage(message);// 發(fā)送信息switchboard.close();// 關(guān)閉對(duì)話框}// 收到系統(tǒng)信息的時(shí)候發(fā)生,登錄時(shí)@Overridepublic void systemMessageReceived(MsnMessenger messenger,MsnSystemMessage message) {// msg(messenger + " recv system message " + message);}// 當(dāng)在聯(lián)系人聊天窗口獲得光標(biāo)并按下第一個(gè)鍵時(shí)發(fā)生@Overridepublic void controlMessageReceived(MsnSwitchboard switchboard,MsnControlMessage message, MsnContact contact) {msg(contact.getFriendlyName() + "正在輸入文字。");}// 異常時(shí)發(fā)生@Overridepublic void exceptionCaught(MsnMessenger messenger, Throwable throwable) {msg(messenger + throwable.toString());msg(throwable);}// 登錄完成時(shí)發(fā)生@Overridepublic void loginCompleted(MsnMessenger messenger) {msg(messenger.getOwner().getDisplayName() + "登錄成功!");}// 注銷時(shí)發(fā)生@Overridepublic void logout(MsnMessenger messenger) {msg(messenger + " logout");}// 收到系統(tǒng)廣播信息時(shí)發(fā)生@Overridepublic void datacastMessageReceived(MsnSwitchboard switchboard,MsnDatacastMessage message, MsnContact friend) {msg(switchboard + " recv datacast message " + message);switchboard.sendMessage(message, false);}// 收到目前不能處理的信息時(shí)發(fā)生@Overridepublic void unknownMessageReceived(MsnSwitchboard switchboard,MsnUnknownMessage message, MsnContact friend) {// msg(switchboard + " recv unknown message " + message);}@Overridepublic void contactListInitCompleted(MsnMessenger messenger) {listContacts();}/*** 更新好友列表完成時(shí)發(fā)生*/@Overridepublic void contactListSyncCompleted(MsnMessenger messenger) {listContacts();}/*** 關(guān)閉一個(gè)聊天窗口時(shí)發(fā)生*/@Overridepublic void switchboardClosed(MsnSwitchboard switchboard) {msg("switchboardStarted " + switchboard);}/*** 打開一個(gè)聊天窗口時(shí)發(fā)生*/@Overridepublic void switchboardStarted(MsnSwitchboard switchboard) {msg("switchboardStarted " + switchboard);}// 打印聯(lián)系人private void listContacts() {MsnContact[] cons = messenger.getContactList().getContactsInList(MsnList.AL);if (cons.length == 0) {msg("空");} else {msg("你現(xiàn)在有" + cons.length + "個(gè)聯(lián)系人");}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)) {//給在線好友發(fā)送消息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 說(shuō)明.
聯(lián)系客服