我正在为自己的学习创建一个简单的聊天应用程序(桌面应用程序),并且我使用netty库作为我的客户端和服务器。
我从线程new Thread(new Client()).start();
启动客户端,我从Helper Class
执行此操作。
当客户端连接到服务器时,我想访问MainController
并将Label
设置为Connected
。
我使用Guava Eventbus
来完成此任务。
我执行以下代码来实现它。
从我的MainController,我订阅了将改变标签文本的函数:
public class MainController implements Initializable{
@FXML Label label_status;
public MainController(){}
@Override
public void initialize(URL location, ResourceBundle resources) {
/**Some Code Here...**/
}
/**Subscribe Eventbus function**/
@Subscribe
public void changeLabelStatus(String status) {
try{
label_status.setText(status);
}catch (Exception e){
System.out.println(TAG + "Failed to Change the status of Label. >> " + e.toString());
}
}
}
从我想发布客户状态的客户处理程序:
public class ClientHandler extends SimpleChannelInboundHandler<Object>{
EventBus eventBus;
MainController mainController;
public ClientHandler(){
eventBus = new EventBus();
mainController = new MainController();
eventBus.register(mainController);
}
/**Change the Status when the Client become connected to Server**/
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
System.out.println(TAG + "Successfully Connected to Server.);
eventBus.post("Connected"); /**Post here**/
}
}
要检查EventBus的这种实现是否有效,我尝试从订阅功能println
开始工作,
但当我尝试label_status.setText(status);
更改Text
Label
时,我收到java.lang.NullPointerException
错误。
我不知道为什么,这是我第一次使用这两个库, 我阅读了EventBus的指南和示例,并从我的理解中了解了我的工作方式。 我的代码出了什么问题?我怎样才能实现我的目标?
注意:我在这个应用程序中使用JavaFX
。
更新
我放弃使用Guava Eventbus,我现在使用了greenrobot/EventBus和latest jar。