Guava Eventbus:从线程发布到UI时发生NullPointerException

时间:2017-11-27 10:02:39

标签: java multithreading javafx guava event-bus

我正在为自己的学习创建一个简单的聊天应用程序(桌面应用程序),并且我使用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/EventBuslatest jar。

0 个答案:

没有答案