我目前正在尝试设置一些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()
方法中?