Не видя минимального воспроизводимого примера, трудно сказать. Наиболее вероятный сценарий из кода, который вы опубликовали, заключается в том, что glowIcon / unglowIncon указывают на разные лямбды, когда вы добавляете обработчик, а не удаляете его. переменных, даже если все точно так же.
EventHandler<MouseEvent> glowIcon = (e) -> {
FontAwesomeIconView icon = (FontAwesomeIconView) e.getSource();
icon.setFill(Color.web("#ffb521"));
scene.setCursor(Cursor.HAND);
};
Решение состоит в том, чтобы убедиться, что они вызываются только один раз, а ссылка на них хранится в вашем контроллере столько времени, сколько они необходимы. Использование final - хорошая техника защиты, позволяющая избежать случайного переназначения объекта и потери ссылки, необходимой для удаления обработчика.
Что-то вроде:
public class GlowController {
private final EventHandler<MouseEvent> glowIcon = (e) -> {
FontAwesomeIconView icon = (FontAwesomeIconView) e.getSource();
icon.setFill(Color.web("#ffb521"));
scene.setCursor(Cursor.HAND);
};
private final EventHandler<MouseEvent> unglowIcon = (e) -> {
FontAwesomeIconView icon = (FontAwesomeIconView) e.getSource();
icon.setFill(Color.web("#000000"));
scene.setCursor(Cursor.DEFAULT);
};
public void doSomething() {
if (Session.getSession().isProjectCreator()) {
newIcon.setFill(Color.web("#000000"));
newIcon.addEventHandler(MouseEvent.MOUSE_ENTERED, glowIcon);
newIcon.addEventHandler(MouseEvent.MOUSE_EXITED, unglowIcon);
}else {
newIcon.setFill(Color.web("#e8e8e8")); //It's changed to this color
newIcon.removeEventHandler(MouseEvent.MOUSE_ENTERED, glowIcon);
newIcon.removeEventHandler(MouseEvent.MOUSE_EXITED, unglowIcon);
}
}
}