如何在代码中的特定点接收消息

时间:2016-02-26 08:25:08

标签: java netty

我目前正在尝试设置一些netty客户端/服务器应用程序。我知道如何发送消息并通过netty类处理它们。我唯一的问题是,我如何从messageReceived()方法接收消息。例如,我通过ChannelHandlerContext从方法getUserInformations()发送消息,并希望等到我得到结果才能使用它们。这是我到目前为止所尝试过的。

我只发布客户端。 netty服务器是构建它的标准方法,没什么特别的。

这是我的主要课程,在这里我按下我的UI上的按钮并通过发送者线程发送消息。

public class FXMLDocumentController implements Initializable {

    public static ChannelHandlerContext handler=null;

    @FXML
    private TextArea txt;


    @FXML
    private void handleButtonAction(ActionEvent event) throws InterruptedException, ExecutionException {
        Sender s = new Sender();
        Thread th = new Thread(s);
        th.start();
        txt.setText(s.get());
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    

}

这是我的发件人主题:

public class Sender extends Task<String> implements DataChangeListenter{

    DataChangeEvent event;

    @Override
    protected String call() throws Exception {
        DataChangedHandler.registerDataChangeListener(this);
        ChannelFuture f = handler.writeAndFlush("TestMessage");
        return null;
    }

    @Override
    public void dataChangeEvent(DataChangeEvent event) {
        System.out.println("Listener: "+event.getMessage());
    }
}

在我的发件人线程中,您可以看到方法dataChangeEvent。我使用了此stackoverflow帖子中的事件系统:Netty - How to get server response in the client。它运行良好,当我打印出来:System.out.println("Listener: "+event.getMessage()); - 正确的消息得到printet,但我不能得到我的主类中的结果,我称之为发送者线程开始。你能解释我如何得到答案在我的主类的handleButtonAction()方法中?

0 个答案:

没有答案