JxBrowser - 渲染通道已经关闭 - ipc 日志:OnRenderViewGoneMessage

JxBrowser - Render channel already closed - ipc log: OnRenderViewGoneMessage

我有一个 Java 使用 JxBrowser (jxbrowser-6.18) 的 Swing 编写的应用程序。

我们正在加载本地 url (http://localhost:8000/someLink.html),然后 运行 在浏览器上加载一些自定义 js。 在某些时候,java 代码中会抛出以下异常:

CERROR 2019-01-25 07:38:29,801 - Exception in thread "AWT-EventQueue-0" 
CERROR 2019-01-25 07:38:29,801 - java.lang.IllegalStateException: Channel stream was closed before response has been received.
CERROR 2019-01-25 07:38:29,804 -  at com.teamdev.jxbrowser.chromium.internal.ipc.SocketChannel.post(SourceFile:216)
CERROR 2019-01-25 07:38:29,804 -  at com.teamdev.jxbrowser.chromium.internal.RenderChannelAccessor.post(SourceFile:67)
CERROR 2019-01-25 07:38:29,805 -  at com.teamdev.jxbrowser.chromium.Browser.executeJavaScriptAndReturnValue(SourceFile:2134)
CERROR 2019-01-25 07:38:29,805 -  at com.teamdev.jxbrowser.chromium.Browser.executeJavaScriptAndReturnValue(SourceFile:2077)

ERROR 2019-01-25 07:38:29,842 - Render channel is already closed.
java.lang.IllegalStateException: Render channel is already closed.
 at com.teamdev.jxbrowser.chromium.internal.RenderChannelAccessor.a(SourceFile:72)
 at com.teamdev.jxbrowser.chromium.internal.RenderChannelAccessor.post(SourceFile:66)
 at com.teamdev.jxbrowser.chromium.Browser.executeJavaScriptAndReturnValue(SourceFile:2134)
 at com.teamdev.jxbrowser.chromium.Browser.executeJavaScriptAndReturnValue(SourceFile:2077)

然后我检查了 ipc 日志,寻找 07:38:29

附近发生的事件

#creating browser 
Jan 25, 2019 7:36:50 AM com.teamdev.jxbrowser.chromium.internal.ipc.Server start
INFO: Shared Memory Name: TDB2-24864
Jan 25, 2019 7:36:50 AM com.teamdev.jxbrowser.chromium.internal.ipc.SharedMemory <init>
INFO: IPC connection has been established. Connection ID: 13818240
Jan 25, 2019 7:36:50 AM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelReader a
FINE: READ:  OnHelloMessage{type=OnHello, uid=4, message='cid:0,bid:0,type:Browser', null
Jan 25, 2019 7:36:50 AM com.teamdev.jxbrowser.chromium.internal.ipc.Server a
INFO: Channel has been accepted: SocketChannel{cid=0, bid=0, type=Browser}
Jan 25, 2019 7:36:50 AM com.teamdev.jxbrowser.chromium.internal.ipc.IPC$b onChannelConnected
INFO: Channel is connected: SocketChannel{cid=0, bid=0, type=Browser}
Jan 25, 2019 7:36:50 AM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelWriter run
FINE: WRITE: LoadURLMessage{type=LoadURL, uid=9, url='about:blank', frameId=-1, extraHeaders='null', postData='null', SocketInfo{cid=0, bid=0, channelType=Browser}
Jan 25, 2019 7:36:50 AM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelReader a
FINE: READ:  OnRenderViewCreatedMessage{type=OnRenderViewCreated, uid=5, renderProcessId=3, SocketInfo{cid=0, bid=0, channelType=Browser}
Jan 25, 2019 7:36:50 AM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelReader a
FINE: READ:  OnFrameCreatedMessage{type=OnFrameCreated, uid=6, parentFrameId=-1, frameId=2, isMainFrame=true, frameName='', SocketInfo{cid=0, bid=0, channelType=Browser}
Jan 25, 2019 7:36:50 AM com.teamdev.jxbrowser.chromium.internal.ipc.Server start
INFO: Shared Memory Name: TDB3-24864
Jan 25, 2019 7:36:50 AM com.teamdev.jxbrowser.chromium.internal.ipc.SharedMemory <init>
INFO: IPC connection has been established. Connection ID: 13816000
Jan 25, 2019 7:36:50 AM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelReader a
FINE: READ:  OnHelloMessage{type=OnHello, uid=7, message='cid:0,bid:0,type:Render', null
Jan 25, 2019 7:36:50 AM com.teamdev.jxbrowser.chromium.internal.ipc.Server a
INFO: Channel has been accepted: SocketChannel{cid=0, bid=0, type=Render}
Jan 25, 2019 7:36:50 AM com.teamdev.jxbrowser.chromium.internal.ipc.IPC$b onChannelConnected
INFO: Channel is connected: SocketChannel{cid=0, bid=0, type=Render}


#loading custom url, executing some javascript, ping messages...
#last messages with cid=0, bid=0 before 07:38:29

Jan 25, 2019 7:37:48 AM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelWriter run
FINE: WRITE: PingMessage{type=Ping, uid=420, alive=false, SocketInfo{cid=0, bid=0, channelType=Browser}
Jan 25, 2019 7:37:48 AM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelReader a
FINE: READ:  PingMessage{type=Ping, uid=420, alive=true, SocketInfo{cid=0, bid=0, channelType=Browser}
Jan 25, 2019 7:37:48 AM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelWriter run
FINE: WRITE: GetFrameIdMessage{type=GetFrameId, uid=422, frameId=-1, result=0, SocketInfo{cid=0, bid=0, channelType=Render}

[...]

Jan 25, 2019 7:38:29 AM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelReader a
FINE: READ:  OnRenderViewGoneMessage{type=OnRenderViewGone, uid=388, terminationStatus=6, errorCode=-536870904, SocketInfo{cid=0, bid=0, channelType=Browser}
Jan 25, 2019 7:38:29 AM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelReader a
FINE: READ:  OnFrameDeletedMessage{type=OnFrameDeleted, uid=389, parentFrameId=2, frameId=4, isMainFrame=false, SocketInfo{cid=0, bid=0, channelType=Browser}
Jan 25, 2019 7:38:29 AM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelReader a
FINE: READ:  OnFrameDeletedMessage{type=OnFrameDeleted, uid=390, parentFrameId=2, frameId=5, isMainFrame=false, SocketInfo{cid=0, bid=0, channelType=Browser}
Jan 25, 2019 7:38:29 AM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelReader a
FINE: READ:  OnFrameDeletedMessage{type=OnFrameDeleted, uid=391, parentFrameId=2, frameId=6, isMainFrame=false, SocketInfo{cid=0, bid=0, channelType=Browser}
Jan 25, 2019 7:38:29 AM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelReader a
FINE: READ:  OnFrameDeletedMessage{type=OnFrameDeleted, uid=392, parentFrameId=-1, frameId=2, isMainFrame=true, SocketInfo{cid=0, bid=0, channelType=Browser}
Jan 25, 2019 7:38:29 AM com.teamdev.jxbrowser.chromium.internal.ipc.Server b
INFO: Channel has been disconnected: SocketChannel{cid=0, bid=0, type=Render}
Jan 25, 2019 7:38:29 AM com.teamdev.jxbrowser.chromium.internal.ipc.IPC$b onChannelDisconnected
INFO: Channel is disconnected: SocketChannel{cid=0, bid=0, type=Render}
Jan 25, 2019 7:38:29 AM com.teamdev.jxbrowser.chromium.internal.ipc.SharedMemory close
INFO: IPC connection has been closed. Connection ID: 13816000
Jan 25, 2019 7:38:29 AM com.teamdev.jxbrowser.chromium.internal.ipc.SharedMemory close
INFO: Pending IPC connections: 4

正如我们从日志中看到的那样,Render 通道在某个时候关闭了。

OnRenderViewGone - 终止状态=6,错误代码=-536870904

如果您有任何想法我应该看哪个方向或者错误代码或终止状态是什么意思 - 请告诉我。我在互联网上搜索过,但找不到任何有用的信息。

请注意,我未能重现该问题,所以如果您对我如何重现它有任何想法,请务必告诉我。

更新 1:您可以在此处找到故障转储文件:https://www.dropbox.com/s/yx86cfhj5rl2eye/chromium-renderer-2019-Jan-25-07-38-17.dmp

1) 如果您尝试访问已处置的浏览器实例,您将得到此异常。例如,如果您使用 Browser.dispose() 方法处理 Browser 实例,然后尝试调用它的 Browser.loadURL() 方法,您将收到此 IllegalStateException 错误消息。请确保在您的 Java 代码中您没有使用已处置的浏览器实例。如果您在不同的线程中使用同一个 Browser 实例,那么请确保您没有在一个线程中释放它,而在另一个线程中使用已经释放的 Browser 实例。

要检查浏览器实例是否被释放,可以使用Browser.isDisposed()方法。

2) 由于 Chromium 引擎中的问题,浏览器实例被意外处置。 默认情况下,在 Windows 平台上,当 Chromium 引擎崩溃时,JxBrowser 会生成 jxbrowser-chromium.dmp 故障转储文件并将其存储在 %localappdata%\JxBrowser\ 目录(例如 c:\users\\appdata\local\JxBrowser\jxbrowser-chromium.dmp). 请检查此位置并与我共享您使用 Google Drive、Dropbox 等在线文件共享服务之一看到的所有故障转储文件。查看描述如何获取不同平台上的故障转储文件。

3) 据我所知,您使用的是 JxBrowser 6.18 版本。我建议您将库更新到 6.22.2,因为最新版本包含许多新功能、更新的 Chromium 引擎和大量稳定性修复,包括与渲染进程连接丢失时的修复。