JxBrowser - канал рендеринга уже закрыт - журнал ipc: OnRenderViewGoneMessage - PullRequest
0 голосов
/ 28 января 2019

У меня есть Java-приложение, написанное на Swing, которое использует JxBrowser (jxbrowser-6.18).

Мы загружаем локальный 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 - terminationStatus = 6, errorCode = -536870904

Если у вас есть какие-либо идеи, в каком направлении мне смотреть или что означает код ошибки или статус завершения - сообщите.Я искал его в Интернете, но не смог найти никакой полезной информации.

Обратите внимание, что мне не удалось воспроизвести проблему, поэтому, если у вас есть какие-либо идеи о том, как я могу воспроизвести ее, пожалуйста, сделайтеTell.

Update1: Здесь вы можете найти файл аварийного дампа: https://www.dropbox.com/s/yx86cfhj5rl2eye/chromium-renderer-2019-Jan-25-07-38-17.dmp

1 Ответ

0 голосов
/ 29 января 2019

1) Вы получите это исключение, если попытаетесь получить доступ к экземпляру браузера, который уже удален.Например, если вы удалите экземпляр Browser с помощью метода Browser.dispose () , а затем попытаетесь вызвать его метод Browser.loadURL () , вы получите это сообщение об ошибке IllegalStateException.Пожалуйста, убедитесь, что в вашем Java-коде вы не используете уже расположенные экземпляры браузера.Если вы используете один и тот же экземпляр Browser в разных потоках, убедитесь, что вы не располагаете его в одном потоке и не используете уже удаленный экземпляр 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 и множество исправлений стабильности, в том числе исправлений при потере связи с процессом рендеринга.

...