package com.dtb.test;
 
import java.io.IOException;
 
import rath.msnm.MSNMessenger;
import rath.msnm.SwitchboardSession;
import rath.msnm.UserStatus;
import rath.msnm.entity.MsnFriend;
import rath.msnm.event.MsnAdapter;
import rath.msnm.msg.MimeMessage;
 
/**
 * 测试java_msn
 * @author dtb
 *
 */
public class Test_Msn extends Thread { 
 private static MSNMessenger msn; 
 
 public static void main(String[] args) { 
  msn = new MSNMessenger( "mine@**.com", "passwd"); //发送人 
  msn.setInitialStatus(UserStatus.ONLINE);
  
  //设置消息
  MimeMessage mime = new MimeMessage(); 
  mime.setKind(MimeMessage.KIND_MESSAGE);
  mime.setMessage("this is a test!");
  
  msn.login();
 
  try {
   //设置延时
   Thread.currentThread().sleep(5000);
   
   //给陌生人发消息,先加对方为好友
   MsnFriend friend = new MsnFriend("other@**.com");//接收人
   msn.addFriend(friend.getLoginName());
   
   //设置session,取得于对方的会话
   SwitchboardSession switchboardSession = msn.doCallWait("other@**.com"); //接收人
   
   //设置延时
   Thread.currentThread().sleep(1000); 
   
   boolean success = false;
   
   //发送在线消息
   success = msn.sendMessage("other@**.com",mime);
   System.out.println("online message : " + success);
   if(!success) {
    //发送离线消息 TODO 
    mime.setKind(MimeMessage.KIND_MAIL_NOTIFY);
    success = msn.sendMessage("other@**.com",mime);
    System.out.println("outline message : " + success);
   }
  } catch (Exception e) { 
   e.printStackTrace(); 
  }
  try {
   //避免好友上限,这里要删除好友
   msn.removeFriend("other@**.com");
  } catch (IOException e) {
   e.printStackTrace();
  }
 } 
代码人原链接为http://topic.csdn.net/u/20081204/10/484b64a8-0d54-4fb1-8b2a-3ec89789260e.html
msn.sendMessage(msn,mime);这个老是返回false
并且执行这个main函数,执行到最后main函数还是处于监听状态
那样的话javaw.exe就一个一个增加了,销毁不了
msn=null的话会过一会儿销毁javaw.exe 
有更好的方法吗?

解决方案 »

  1.   

    试试把你的发送写到一个单独的类的一个方法中,然后在main中new这个类调用其方法。
      

  2.   

    干嘛要在Thread中运行呢,莫名其妙!
      

  3.   

    您那里知道是thread啊?
    请问咋解决啊?
      

  4.   

    您那里知道是thread啊? 
    请问咋解决啊?
      

  5.   

    还是老样子
    测试过的
    msn=null可以真正解决吗?