Smack api 和 Java

Posted

技术标签:

【中文标题】Smack api 和 Java【英文标题】:Smack api and Java 【发布时间】:2009-02-21 21:27:23 【问题描述】:

我正在使用 Tapestry 5,Smack api 3.1.0。

我已经建立了连接,并且能够通过 xmpp 服务器与用户进行通信,但是我收到的回复在收到时会发送到标准输出:

Chat chat = connection.getChatManager().createChat("blah@jabber.org", new MessageListener() 
    public void processMessage(Chat chat, Message message) 
        // Print out any messages we get back to standard out.
        System.out.println("Received message: " + message.getBody());                   // this works

        showonbrowser = message.getBody();                                                   
        System.out.println(showonbrowser) // this prints nothing
    
;

我正在寻找对我的 html 文件的回复,以便我可以在 Web 而不是控制台上阅读它们。但是,当我尝试将 message.getBody() 设置为 showonbrowser (页面上的一个属性)时,我看不到任何结果。有谁知道我如何解决这个问题?

问候,

凯斯

【问题讨论】:

【参考方案1】:

Smack 是多线程的,它有一个讨厌的习惯,就是吃掉抛出的异常(默默地)。很可能你没有使用线程安全的 GUI,它会抛出一个你永远不会得到的异常。

【讨论】:

【参考方案2】:

我认为processMessage 方法是在页面被渲染之后被调用的。

您正在创建一个 MessageListener 实例(通过匿名类),因此您不知道何时会调用 processMessage 方法。我认为您必须使用 AJAX 来对页面进行部分更新、轮询服务器并获取任何新消息以在页面上显示它们。

【讨论】:

以上是关于Smack api 和 Java的主要内容,如果未能解决你的问题,请参考以下文章

GCM 和 Smack API

Smack api 和 Java

使用 smack API 发送和接收消息

Smack API 问题

XMPP 注销(Smack API)

NoClassDefFoundError: org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration only API 19