user8745280
user8745280

Reputation:

Listener Removal

I have a listener addition like this:

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
                    }
                }
            });

Now my question is, is there any way with which this listener can be removed after execution? I am pretty new to these type of things.Thanks in advance for your help!

Upvotes: 0

Views: 116

Answers (1)

Jai
Jai

Reputation: 8363

You should separately create the ChangeListener and keep a reference of it.

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);

When you need to remove it later:

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

If you just need the listener to stay until it becomes "succeeded", then you can:

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);
            }
        }
    });

Upvotes: 2

Related Questions