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

时间:2019-01-28 14:19:00

标签: jxbrowser

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

我们正在加载本地网址(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-TerminationStatus = 6,errorCode = -536870904

如果您对我应该朝哪个方向或错误代码或终止状态的含义有任何想法,请告诉我。我在互联网上进行搜索,但找不到任何有用的信息。

请注意,我没有设法重现该问题,因此,如果您对如何重现该问题有任何想法,请务必告知。

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

1 个答案:

答案 0 :(得分:2)

1)如果您尝试访问已被处置的Browser实例,则会出现此异常。例如,如果使用 Browser.dispose()方法处理浏览器实例,然后尝试调用其 Browser.loadURL()方法,则会收到此IllegalStateException错误信息。请确保在您的Java代码中,您不使用已处置的Browser实例。如果您在不同的线程中使用相同的Browser实例,请确保不要将其放置在一个线程中,而将已经放置的Browser实例用于另一个线程。

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

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

3)如我所见,您正在使用JxBrowser 6.18版本。我建议您将库更新为6.22.2,因为最新版本包含许多新功能,更新的Chromium引擎和许多稳定性修复程序,包括与渲染过程失去连接时的修复程序。