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 packetif(packet instanceof Presence)中的语句时
的计算结果不是真的。@MarcVanDaele但有趣的是..一段时间后,if
语句对user-a
的计算结果为真,该语句表示数据包是从user-b
@MarcVanDaeleuser-b
发送订阅给user-a
,如方法过程中所述packet
在startPLThread()中生成一个新线程似乎是不必要的,接受所有数据包的数据包过滤器也是不必要的。
private void initUXmppP() { // Initialize user-xmpp-parameters
Roster roster = ofConnection.getRoster();
roster.setSubscriptionMode(Roster.SubscriptionMode.accept_all);
}