是否有一个与@FXML initialize相对应的方法?

 2023-02-16    293  

问题描述

当视图被破坏时(舞台封闭,另一个视图取代等),是否有任何方法可以在控制器上调用?也就是说,是否有:

@FXML
private void initialize()

update :我这样做的原因是我的应用程序正在接收来自PubNub的消息,然后需要将这些消息传输到这些控制器上,以便他们可以选择是否对它们采取行动或不是(它们是否取决于内部控制器信息,例如视图的大小).

是否有一个与@FXML initialize相对应的方法?

我的计划是让这些控制器注册在全球列表中,并在被摧毁时,请登记自己.

推荐答案

大多数评论都告诉您,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
    }
}

以上所述是小编给大家介绍的是否有一个与@FXML initialize相对应的方法?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/33840.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。