Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 线程nullpointerException QuickBlox“;muc+;“聊天室”;_Java_Multithreading_Chat - Fatal编程技术网

Java 线程nullpointerException QuickBlox“;muc+;“聊天室”;

Java 线程nullpointerException QuickBlox“;muc+;“聊天室”;,java,multithreading,chat,Java,Multithreading,Chat,我对API QUICKBLOX有一个问题,当我输入“MUC”时,我跳转到一个非常奇怪的错误,我不知道为什么 public class MyChatController { // ================= QuickBlox ===== Step 8 ================= // Get QuickBlox chat server domain. // There will be created connection with chat server below. publ

我对API QUICKBLOX有一个问题,当我输入“MUC”时,我跳转到一个非常奇怪的错误,我不知道为什么

public class MyChatController {

// ================= QuickBlox ===== Step 8 =================
// Get QuickBlox chat server domain.
// There will be created connection with chat server below.
public static final String CHAT_SERVER = QBChat.getChatServerDomain();

private XMPPConnection connection;

private ConnectionConfiguration config;
private Chat chat;
// Multi-User Chat, también conocido como
// MUC, es un robusto protocolo de conferencia basado en XMP. 
// Fue desarrollado como un sistema de chat en grupo para extender 
// la funcionalidad de clientes Jabber/XMPP, cuyo protocolo sólo permite 
// establecer conferencias entre 2 personas. Ha sido acogido como propuesta 
// de extensión XEP-0045, y se ha incluido de forma nativa en el programa servidor ejabberd.
private MultiUserChat muc2;

private String chatLogin;
private String password;
private String friendLogin;

private ChatManager chatManager;
   public MyChatController(String chatLogin, String password) {
    this.chatLogin = chatLogin;
    this.password = password;
}

public void startChat(String buddyLogin) {
    this.friendLogin = buddyLogin;

    new Thread(new Runnable() {
        @Override
        public void run() {
            // Chat action 1 -- create connection.
            Connection.DEBUG_ENABLED = true;
            config = new ConnectionConfiguration(CHAT_SERVER);
            connection = new XMPPConnection(config);

            try {
                connection.connect();
                connection.login(chatLogin, password);

                // Chat action 2 -- create chat manager.
                chatManager = connection.getChatManager();

                // Chat action 3 -- create chat.
                chat = chatManager.createChat(friendLogin, messageListener);

                // Set listener for outcoming messages.
                chatManager.addChatListener(chatManagerListener);

                // Muc 2 
                muc2 = new MultiUserChat(connection, "2387_chat1@muc.chat.quickblox.com");
                // Discover whether user3@host.org supports MUC or not

                // The room service will decide the amount of history to send
                muc2.join(chatLogin);
                muc2.invite(friendLogin, "Welcome!");
                Log.d("friendLogin ->",friendLogin);
                // Set listener for outcoming messages.
                //chatManager.addChatListener(chatManagerListener);
                muc2.addMessageListener(packetListener);
                addListenerToMuc(muc2);
                //chat1@muc.chat.quickblox.com    ---  el meu
                Message message = new Message(friendLogin + "@muc.chat.quickblox.com");
                message.setBody("Join me for a group chat!");
                message.addExtension(new GroupChatInvitation("2387_chat1@muc.chat.quickblox.com"));
                connection.sendPacket(message);

            } catch (XMPPException e) {
                e.printStackTrace();
            }
        }
    }).start();
}

/*** muc */
private void addListenerToMuc(MultiUserChat muc){
    if(null != muc){
        muc.addMessageListener(new PacketListener() {

            @Override
            public void processPacket(Packet packet) {
                Log.i("processPacket", "receiving message");
                }
        });
    }
}    

PacketListener packetListener = new PacketListener() {
    @Override
    public void processPacket(Packet packet) {
      Message message = (Message)packet;
      try {
        muc2.sendMessage(message);
    } catch (XMPPException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
      //System.out.println("got message " + message.toXML());
    }
};  


private PacketInterceptor packetInterceptor = new PacketInterceptor() {

    @Override
    public void interceptPacket(Packet packet) {
         System.out.println("Sending message: " + packet.toString());
         Message message = muc2.createMessage();
         message.setBody("Hello from producer, message " +
                " ");
         try {
            muc2.sendMessage(message);
        } catch (XMPPException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
};

/***/
错误:

05-20 23:16:19.679: E/AndroidRuntime(3361): FATAL EXCEPTION: Thread-277
05-20 23:16:19.679: E/AndroidRuntime(3361): java.lang.NullPointerException
05-20 23:16:19.679: E/AndroidRuntime(3361):     at org.jivesoftware.smackx.muc.MultiUserChat$1.connectionCreated(MultiUserChat.java:114)
05-20 23:16:19.679: E/AndroidRuntime(3361):     at org.jivesoftware.smack.XMPPConnection.initConnection(XMPPConnection.java:607)
05-20 23:16:19.679: E/AndroidRuntime(3361):     at org.jivesoftware.smack.XMPPConnection.connectUsingConfiguration(XMPPConnection.java:556)
05-20 23:16:19.679: E/AndroidRuntime(3361):     at org.jivesoftware.smack.XMPPConnection.connect(XMPPConnection.java:984)
05-20 23:16:19.679: E/AndroidRuntime(3361):     at com.quickblox.sample.chat.MyChatController$5.run(MyChatController.java:73)
05-20 23:16:19.679: E/AndroidRuntime(3361):     at java.lang.Thread.run(Thread.java:856)
05-20 23:16:19.807: E/Trace(3445): error opening trace file: No such file or directory (2)

看起来你的Smack配置没有正确初始化。这是一个已知问题,已报告并解释。

您的Smack配置似乎未正确初始化。这是一个已知问题,已报告并解释。

Dropbox示例:但抛出ThreadNullPointerException或错误XML

这是错误XML:

如果我使用其他android smack-x,我会得到:

05-21 18:16:17.409: E/AndroidRuntime(2352): FATAL EXCEPTION: main
05-21 18:16:17.409: E/AndroidRuntime(2352): java.lang.VerifyError: com/quickblox/sample/chat/MyChatController
05-21 18:16:17.409: E/AndroidRuntime(2352): at com.quickblox.sample.chat.ChatActivity.onCreate(ChatActivity.java:81)
现在有错误:

05-21 23:30:32.075: W/System.err(2579): java.lang.NullPointerException
05-21 23:30:32.075: W/System.err(2579):     at org.jivesoftware.smackx.muc.MultiUserChat$1.connectionCreated(MultiUserChat.java:115)
问题出在这里,但我不知道以下代码:

已解决。

Dropbox示例:但抛出ThreadNullPointerException或错误XML

这是错误XML:

如果我使用其他android smack-x,我会得到:

05-21 18:16:17.409: E/AndroidRuntime(2352): FATAL EXCEPTION: main
05-21 18:16:17.409: E/AndroidRuntime(2352): java.lang.VerifyError: com/quickblox/sample/chat/MyChatController
05-21 18:16:17.409: E/AndroidRuntime(2352): at com.quickblox.sample.chat.ChatActivity.onCreate(ChatActivity.java:81)
现在有错误:

05-21 23:30:32.075: W/System.err(2579): java.lang.NullPointerException
05-21 23:30:32.075: W/System.err(2579):     at org.jivesoftware.smackx.muc.MultiUserChat$1.connectionCreated(MultiUserChat.java:115)
问题出在这里,但我不知道以下代码:


已解决。

您的堆栈跟踪显示com.quickblox.sample.chat.MyChatController$5.run(MyChatController.java:73)。哪一条是73号线?这将告诉您错误发生的位置,并为您提供一条关于此处的
null
的重要线索;工作正常,但当我重新进入与用户对话后离开活动,我跳过了nullpointer。您的堆栈跟踪显示com.quickblox.sample.chat.MyChatController$5.run(MyChatController.java:73)。哪一条是73号线?这将告诉您错误发生的位置,并为您提供一条关于此处的
null
的重要线索;工作正常,但当我重新进入与用户对话后离开活动时,我跳过了nullpointer。我明白了,但是android-smack7,quickBlox附带了api,很难更改某些内容。我不知道该怎么办。在创建连接之前,您是否尝试初始化配置(
SmackConfiguration.getVersion();
)?没有“MUC”作为访问quickblox room的权限,如果可以的话,可以使用“MUC”。MUC还有其他选择吗?或阿尔古纳·马内拉房间的可变“聊天室”:教授,我不懂西班牙语。您是否尝试过将SmackConfiguration.getVersion()放入;按照这里的建议调用您的类:?我明白了,但是android-smack7、quickBlox随api提供,很难更改某些内容。我不知道该怎么办。在创建连接之前,您是否尝试初始化配置(
SmackConfiguration.getVersion();
)?没有“MUC”作为访问quickblox room的权限,如果可以的话,可以使用“MUC”。MUC还有其他选择吗?或阿尔古纳·马内拉房间的可变“聊天室”:教授,我不懂西班牙语。您是否尝试过将SmackConfiguration.getVersion()放入;按照这里的建议给你的班级打电话:?