在我的JxBrowser应用程序中,我根据给定的需求为每个请求创建并配置一个浏览器。几百次请求后,我开始收到“无法获取浏览器browserChannel”异常。为了调试此问题,我注意到我的ChannelListeners数量不断增长。我在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有关?
答案 0 :(得分:0)
这4个侦听器属于实现为单例的默认IPC
实例。因此,一旦您通过IPC
访问默认的IPC.getDefault()
实例,就会注册这4个监听器,而我们绝不会注销它们。
仅供参考:该库可能会在其中创建很多ChannelListeners
。这些侦听器是内部专用逻辑的一部分。必要时将其删除。
关于“无法获取浏览器browserChannel”错误消息–此错误消息表明库未能初始化Browser
实例。在这种情况下,应该分析日志消息以检测出问题的根本原因。