Трудно быть уверенным без кода, но, похоже, это правильное поведение.
У вас есть TextField
B
на сцене.В конструкторе A
вы создаете анонимный класс, назовем его A$onKeyPressed
.Анонимные классы в Java не являются статичными, поэтому этот объект сохраняет ссылку на A
объект.
После того, как contstructor готов, у вас есть ссылка
scene -> B -> onKeyPressedListeners -> A$onKeyPressed -> A
Таким образом, A недопустимо для GC.
Чтобы избежать этого, вы можете создать именованный статический внутренний класс и использовать его в конструкторе.Например:
public class A {
public A(TextField B) {
B.setOnKeyPressed(new AHandler());
}
private static class AHandler implements EventHandler<KeyEvent> {
public void handle(KeyEvent t) { /* doStuff */ }
}
}