Java 为什么名册不是';两边都加了吗?

Java 为什么名册不是';两边都加了吗?,java,smack,Java,Smack,user-a向user-b发送订阅请求。订阅模式已设置为accept\u all。此外,已为这两个用户注册了数据包侦听器 当user-a向user-b发送请求时,此方法称为: private void searchUser(java.awt.event.ActionEvent evt) { try { String userToSearch = jTextField1.getText();

user-a
user-b
发送订阅请求。订阅模式已设置为
accept\u all
。此外,已为这两个用户注册了数据包侦听器

user-a
user-b
发送请求时,此方法称为:

    private void searchUser(java.awt.event.ActionEvent evt) {                            
        try {
            String userToSearch = jTextField1.getText(); 
                if(!xmppParamInit) {
                    initUXmppP();
                    xmppParamInit = true;
                }
                Presence subscribe = new Presence(Presence.Type.subscribe);
                userToSearch += "@localhost";
                subscribe.setTo(userToSearch);
                ofConnection.sendPacket(subscribe); // Send the 'subscribe' packet
        }catch(Exception exc) {
            exc.printStackTrace();
        }
    }
在此方法之前,调用以下函数:

private void startPLThread() { // start packet-listener-thread
    Runnable r = new Runnable() {
        @Override
        public void run() {
            startPL();
        }
    };
    new Thread(r,"packet listener thread").start();
}

private void startPL() {
    PacketListener pListener = new PacketListener() {
        @Override
        public void processPacket(Packet packet) {System.out.println("Inside process packet");
            if(packet instanceof Presence) {
                Presence presence = (Presence) packet;
                Presence subscription = new Presence(Presence.Type.subscribe);
                subscription.setTo(presence.getFrom());
                System.out.println("presence.getFrom : " + presence.getFrom());
                ofConnection.sendPacket(subscription);
            }
        }
    };

    PacketFilter pFilter = new PacketFilter() {
        @Override
        public boolean accept(Packet packet) {
            return true;
        }
    };

    ofConnection.addPacketListener(pListener, pFilter);
}
问题是
user-a
可以在其花名册中看到
user-b
,但
user-b
无法在其花名册中看到
user-a
。我不明白这是为什么。有什么问题吗

订阅模式已设置为
accept\u all
,此方法从搜索用户中调用:


这是一个GUI应用程序,我尝试让两个用户保持在线

是用户b接收到的状态数据包(或者换句话说,是processPacket调用,是用户b向用户a发送子脚本)?@MarcVanDaele否。它作为例程调用。当
user-a
user-b
发送数据包时,不会立即调用处理数据包。当调用process packet
if(packet instanceof Presence)中的语句时
的计算结果不是真的。@MarcVanDaele但有趣的是..一段时间后,
if
语句对
user-a
的计算结果为真,该语句表示数据包是从
user-b
@MarcVanDaele
user-b
发送订阅给
user-a
,如方法
过程中所述packet
在startPLThread()中生成一个新线程似乎是不必要的,接受所有数据包的数据包过滤器也是不必要的。
private void initUXmppP() { // Initialize user-xmpp-parameters
    Roster roster = ofConnection.getRoster();
    roster.setSubscriptionMode(Roster.SubscriptionMode.accept_all);
}