1

こんにちは私はJavaを初めて使用します。そして、それは私に多くのストレスを与えます。smackapiおよびopenfireサーバーとチャットする必要があります。このために私のJavaコードは以下にあります

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でこのコードを2回実行します。個々のユーザー用にそれぞれ。オンドリを追加して、これら2人のユーザーをopenfireの友達として追加しました。しかし、上記のJavaコードを実行してログインすると、利用可能なプレゼンスが送信されます。しかし、彼らは利用可能なお互いに彼らの存在を送ることはできません。代わりに、バディから2つのエラーメッセージを受け取ります。

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

コードの何が問題なのかわかりません。そして、私は本当にこの問題をすぐに解決する必要があります。この問題を他のフォーラムにも投稿しましたが、答えが見つかりません。したがって、誰かが何らかの解決策を持つことができれば、それは非常に大きな助けになるでしょう。ありがとうございました。

4

1 に答える 1

0

IgniteRealtimeのWebの多くのスレッドでは、Smackに非同期でRosterを取得させる必要があることがわかります。そのため、代わりにRosterListenerを使用するようにdisplayBuddyList()を変更するか、ログインとdisplayBuddyListの間にThread.sleep(5000)を使用します。 ()関数(リスナーを使用したくない場合は、これをお勧めします)を使用して、名簿に更新されたプレゼンスを入力する時間を確保します。

于 2011-07-14T07:16:40.283 に答える