是否有@FXML初始化的对应物?

问题描述 投票:2回答:1

当一个视图被销毁(阶段关闭,另一个视图取代它等)时,是否有任何方法将在控制器上被调用?也就是说,是否有对应物:

@FXML
private void initialize()

更新:我这样做的原因是我的应用程序正在从PubNub接收消息,然后这些消息需要中继到这些控制器,以便他们可以选择是否对它们采取行动(它们是否依赖于内部控制器信息) ,例如视图的大小)。

我的计划是让这些控制器在全局列表中注册,并在销毁时取消注册。

java javafx
1个回答
2
投票

大多数评论告诉你,JavaFX中没有这样的等效功能。 James_D也提到使用WeakReference,我认为这是一个很好的解决方案。

public final class PubNubManager {
    private final List<WeakReference<PubNubListener>> listeners = new ArrayList<>();

    // Other standard singleton stuff

    public void informListeners(PubNubData data) {
        listeners.stream().forEach(listenerRef -> {
            if (listenerRef.get() != null)
                listenerRef.get().receiveData(data);
        });

        // You can remove weakreference that are no longer valid, or stop getting for data when there are no more listener.
    }

    public void registerListener(PubNubListener listener) {
        if (listener != null)
            listeners.add(new WeakReference<>(listener));
    }

    // You can make one to unregister too if you want.
}

public interface PubNubListener {
    void receiveData(PubNubData data);
}

public class ControllerA implements PubNubListener {
    @Override
    public void receiveData(PubNubData data) {
        // What you need to do
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.