【问题标题】:Listener Removal监听器移除
【发布时间】:2018-06-20 09:40:31
【问题描述】:

我有一个像这样的监听器:

lwebview.getEngine().getLoadWorker().stateProperty().addListener(new ChangeListener() {
                public void changed(ObservableValue pobservable, Object poldstate, Object pnewstate) {
                    if (pnewstate.toString().equals("SUCCEEDED")) {
                        //code to be executed
                    }
                }
            });

现在我的问题是,有没有什么方法可以在执行后删除这个监听器?我对这些类型的东西很陌生。在此先感谢您的帮助!

【问题讨论】:

    标签: java javafx listener


    【解决方案1】:

    您应该单独创建ChangeListener 并保留它的引用。

    ChangeListener<Worker.State> listener = new ChangeListener<Worker.State>() {
            public void changed(ObservableValue<? extends Worker.State> pobservable, Worker.State poldstate, Worker.State pnewstate) {
                if (pnewstate = Worker.State.SUCCEEDED) {
                    //code to be executed
                }
            }
        };
    
    lwebview.getEngine().getLoadWorker().stateProperty().addListener(listener);
    

    当您以后需要删除它时:

    lwebview.getEngine().getLoadWorker().stateProperty().removeListener(listener);
    

    如果您只需要听者一直停留到它“成功”,那么您可以:

    lwebview.getEngine().getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() {
            public void changed(ObservableValue<? extends Worker.State> pobservable, Worker.State poldstate, Worker.State pnewstate) {
                if (pnewstate = Worker.State.SUCCEEDED) {
                    //code to be executed
                    lwebview.getEngine().getLoadWorker().stateProperty().removeListener(this);
                }
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-11
      • 1970-01-01
      • 2014-11-29
      • 2011-12-30
      • 2013-07-14
      • 1970-01-01
      • 2021-08-23
      • 2021-03-24
      相关资源
      最近更新 更多