Java:从另一个类扩展侦听器方法的功能

Posted

技术标签:

【中文标题】Java:从另一个类扩展侦听器方法的功能【英文标题】:Java: Extend functionality of listener method from another class 【发布时间】:2016-05-07 05:58:40 【问题描述】:

我想为所有 smack 的基本方法(如连接、登录、发送消息、接收消息)创建一个单独的类。

所以,有一个监听器方法来接收消息。

static ChatManagerListener chatManagerListener = new ChatManagerListener() 
        @Override
        public void chatCreated(Chat chat, boolean createdLocally) 
            chat.addMessageListener(
                    new ChatMessageListener() 
                        @Override
                        public void processMessage(Chat chat, Message message) 
                            System.out.println("MESSAGE RECEIVED: "+message.toString());
                            messageReceived(message);
                        
                    );
        
    ;

消息被接收并传递给 messageReceived() 方法。

情况:

现在,当我将这个类导入其他类时,我想扩展这个 messageReceived() 方法的功能,因此整个过程仍然是抽象的,开发人员只处理传入的消息。或者,这个 messageReceived() 方法以某种方式将消息推送到其他类。

【问题讨论】:

你能改变 ChatManagerListener 吗?在这里使用工厂(例如)将是一个直接的实现。 (另外,你能把它改成 ChatListenerManager 吗?哈哈) 【参考方案1】:

基本上你需要定义另一个监听器来管理消息。

这是一个有效的 sn-p 示例(原型,因此它很丑陋且没有任何模式)用于更新接收者用户的 GUI。

如果您需要其他东西,请记住,您需要服务器端的插件 (PacketInterceptor)。

/*MessageGuiUpdate.java*/
    public interface MessageGuiUpdate 

        public void displayMessage(String body);
    



/*XmppManager.java*/
public void init() throws XMPPException, SmackException, IOException 
private MessageGuiUpdate guiUpdate;
 //FOO
 //BAR

/* init() */
        this.chatManager = ChatManager.getInstanceFor(connection);


        this.chatManager.addChatListener(
                new ChatManagerListener() 
                    @Override
                    public void chatCreated(Chat chat, boolean createdLocally)
                    
                        if (!createdLocally)
                        

                            chat.addMessageListener(new IncomingMessageListener());;
                        
                    
                );


/*nested class*/
    class IncomingMessageListener implements ChatMessageListener 
        @Override
        public void processMessage(Chat arg0, Message message) 
            String from = message.getFrom();
            String body = message.getBody();

            if (body != null)
            
            System.out.println(String.format("============ Received message '%1$s' from %2$s\n============", body, from));
            guiUpdate.displayMessage(body);
            

        

    

/*CustomGui.java*/
public class CustomGui implements MessageGuiUpdate 
//foo

@Override
public void displayMessage(String message) 
    System.out.println("I've just recived: "+message);



【讨论】:

以上是关于Java:从另一个类扩展侦听器方法的功能的主要内容,如果未能解决你的问题,请参考以下文章

JAVA:事件监听器之WindowAdapter类(针对窗口事件)

JAVA:事件监听器之WindowAdapter类(针对窗口事件)

React Navigation didfocus 事件监听器在类组件和功能组件之间的工作方式不同

从另一个线程更改视图[关闭]

从另一个活动调用时为空侦听器

如何在 C# 中使用匿名类重新实现 Java 侦听器