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

时间:2017-12-20 19:51:04

标签: java javafx

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

@FXML
private void initialize()

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

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

1 个答案:

答案 0 :(得分: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
    }
}