0

在我的 JxBrowser 应用程序中,我根据给定的需求为每个请求创建和部署一个浏览器。在数百个请求之后,我开始收到“无法获取浏览器浏览器通道”异常。在尝试对此进行调试时,我注意到我有越来越多的 ChannelListener。我在 browser.dispose() 之后将以下代码添加到我的应用程序中以查看此内容。

    if (CollectionUtils.isNotEmpty(IPC.getDefault().getMainChannel().getChannelListeners())) {
        List<ChannelListener> channelListeners = IPC.getDefault().getMainChannel().getChannelListeners();
        for(ChannelListener listener : channelListeners) {
            logger.info("Listener: " + listener.getClass());
        }
    }

结果,我在日志中看到这 4 个重复

    2018-06-21 13:30:28,105 [pool-3-thread-1] INFO  c.t.l.l.a.service.BrowserManager - Listener: class com.teamdev.jxbrowser.chromium.ZoomService$a 
    2018-06-21 13:30:28,105 [pool-3-thread-1] INFO  c.t.l.l.a.service.BrowserManager - Listener: class com.teamdev.jxbrowser.chromium.NetworkService$a 
    2018-06-21 13:30:28,105 [pool-3-thread-1] INFO  c.t.l.l.a.service.BrowserManager - Listner: class com.teamdev.jxbrowser.chromium.NotificationService$a 
    2018-06-21 13:30:28,105 [pool-3-thread-1] INFO  c.t.l.l.a.service.BrowserManager - Listener: class com.teamdev.jxbrowser.chromium.ProtocolService$a 

这是我没有正确处理的东西吗?这是一个 JxBrowser 问题,可能与我的 IPCException 有关吗?

4

1 回答 1

0

这 4 个监听器属于IPC作为单例实现的默认实例。因此,一旦您通过 访问默认IPC实例IPC.getDefault(),这 4 个侦听器就会被注册,我们永远不会取消注册它们。

仅供参考:图书馆可能会在里面创造很多ChannelListeners东西。这些监听器是内部私有逻辑的一部分。必要时将它们移除。

至于“Failed to get Browser browserChannel”错误消息——这个错误消息表明库未能初始化Browser实例。在这种情况下,应分析日志消息以检测问题的根本原因。

于 2018-06-22T16:49:24.877 回答