2010-07-19 4 views
1

안녕하세요 저는 Java에서 새로운 기능을 사용하고 있습니다. 그리고 그것은 저에게 많은 스트레스를줍니다. 나는 smack api 및 openfire 서버와 채팅해야합니다. 내 자바 코드는 다음과 같습니다smack api 및 openfire 서버로 buddy를 추가 할 때 문제가 발생했습니다.

import java.util.*; 
import java.io.*; 

import org.jivesoftware.smack.Chat; 
import org.jivesoftware.smack.ConnectionConfiguration; 
import org.jivesoftware.smack.MessageListener; 
import org.jivesoftware.smack.Roster; 
import org.jivesoftware.smack.RosterEntry; 
import org.jivesoftware.smack.XMPPConnection; 
import org.jivesoftware.smack.XMPPException; 
import org.jivesoftware.smack.packet.Message; 

public class RunJabberSmackAPI implements MessageListener{ 

    XMPPConnection connection; 

    public void login(String userName, String password) throws XMPPException { 
     ConnectionConfiguration config = new ConnectionConfiguration("127.0.0.1 ",5222,"localhost"); 
     connection = new XMPPConnection(config); 

     connection.connect(); 
     connection.login(userName, password); 
    } 

    public void sendMessage(String message, String to) throws XMPPException { 
     Chat chat = connection.getChatManager().createChat(to, this); 
     chat.sendMessage(message); 
    } 

    public void displayBuddyList() 
    { 
     Roster roster = connection.getRoster(); 
     Collection<RosterEntry> entries = roster.getEntries(); 

     System.out.println("\n\n" + entries.size() + " buddy(ies):"); 
     for(RosterEntry r:entries) { 
     System.out.println(r.getUser()); 
     } 
    } 

    public void disconnect() { 
     connection.disconnect(); 
    } 

    public void processMessage(Chat chat, Message message) { 
     if(message.getType() == Message.Type.chat) 
     System.out.println(chat.getParticipant() + " says: " + message.getBody()); 
    } 

    public static void main(String args[]) throws XMPPException, IOException { 
     // declare variables 
     RunJabberSmackAPI c = new RunJabberSmackAPI(); 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     String msg; 

     // turn on the enhanced debugger 
     XMPPConnection.DEBUG_ENABLED = true; 

     // Enter your login information here 
     c.login("admin", "admin"); // I created this user with openfire. 

     c.displayBuddyList(); 

     System.out.println("-----"); 
     System.out.println("Who do you want to talk to? - Type contacts full email address:"); 
     String talkTo = br.readLine(); 

     System.out.println("-----"); 
     System.out.println("All messages will be sent to " + talkTo); 
     System.out.println("Enter your message in the console:"); 
     System.out.println("-----\n"); 

     while(!(msg=br.readLine()).equals("bye")) { 
     c.sendMessage(msg, talkTo); 
     } 

     c.disconnect(); 
     System.exit(0); 
    } 
} 

나는이 코드를 두 번 내 PC에서 실행합니다. 개별 사용자를위한 수탉을 추가하여이 두 명의 사용자를 openfire의 친구로 추가했습니다. 그러나 위의 Java 코드를 실행하여 로그인하면 사용 가능한 것으로 존재를 보냅니다. 그러나 그들은 그들의 존재를 서로에게 제공 할 수는 없습니다. 대신 그들은 친구에게서 2 개의 오류 메시지를받습니다.

First error message : www.freeimagehosting.net/image.php?eac15f606a.jpg 
Second error message : www.freeimagehosting.net/image.php?b827058d07.jpg 

내 코드에 어떤 문제가 있는지 알 수 없습니다. 그리고 저는이 문제를 곧 풀어야합니다. 나는이 문제를 다른 포럼에도 올렸지 만 어떤 대답도 찾을 수 없다. 누군가가 어떤 해결책을 가질 수 있다면 그것은 큰 도움이 될 것입니다. 고맙습니다.

+0

도와주세요. 이 문제를 빨리 해결할 필요가 있습니다. ( – Tahlil

답변

0

IgniteRealtime의 웹에있는 많은 스레드에서 Smack이 비동기 적으로 Roster를 검색하도록해야하므로 displayBuddyList()에서 RosterListener를 대신 사용하거나 단순히 Thread.sleep (5000)을 사용하여 login 및 displayBuddyList() 함수 (권장 리스너를 사용하지 않으려는 경우)를 사용하여 로스터에 업데이트 된 현재 상태로 채울 수 있습니다.

+0

답장을 보내 주셔서 감사합니다 :) 이미 답변을 찾았고 해결했습니다 : D – Tahlil

+0

@kalkin 나는 동일한 문제가 있으며 지난 4 일간의 해결책을 찾고 있습니다. 저를 도와주세요 ?? –

+0

@kalkin 저는 매우 빨리 형제 님을 해결해야합니다. ( –

관련 문제