1

我正在使用 JavaFX 将 jxbrowser 集成到 Eclipse 中,以在 SWT 和 jxbrowser 之间进行桥接。它经常挂起,看起来浏览器卡在等待 Socket 的 countDownLatch 中。有人知道问题是什么吗?任何帮助将不胜感激。谢谢!

这是两个挂起的堆栈跟踪:

挂#1

Unsafe.park(boolean, long) line: not available [native method]  
LockSupport.parkNanos(Object, long) line: not available 
CountDownLatch$Sync(AbstractQueuedSynchronizer).doAcquireSharedNanos(int, long) line: not available 
CountDownLatch$Sync(AbstractQueuedSynchronizer).tryAcquireSharedNanos(int, long) line: not available    
CountDownLatch.await(long, TimeUnit) line: not available    
LatchUtil.await(CountDownLatch, RuntimeException, int) line: 25 
LatchUtil.await(CountDownLatch, RuntimeException) line: 20  
SocketChannel.post(T) line: 189 
Browser.executeJavaScriptAndReturnValue(long, String) line: 1643    

挂#2

Unsafe.park(boolean, long) line: not available [native method]  
LockSupport.parkNanos(Object, long) line: not available 
CountDownLatch$Sync(AbstractQueuedSynchronizer).doAcquireSharedNanos(int, long) line: not available 
CountDownLatch$Sync(AbstractQueuedSynchronizer).tryAcquireSharedNanos(int, long) line: not available    
CountDownLatch.await(long, TimeUnit) line: not available    
LatchUtil.await(CountDownLatch, RuntimeException, int) line: 25 
LatchUtil.await(CountDownLatch, RuntimeException) line: 20  
SocketChannel.post(T) line: 189 
Browser.b(M) line: 274  
Browser.canGoBack() line: 1818  
4

1 回答 1

1

根据Hang #1的调用堆栈,我看到 JxBrowser 正在等待 JavaScript 代码完成执行并返回结果。那是因为您调用了 Browser.executeJavaScriptAndReturnValue() 函数。此函数阻止当前线程执行并等待给定的 JavaScript 代码执行。

Hang #2中的调用堆栈表明您调用了 Browser.canGoBack() 函数,该函数向 Chromium 引擎发送请求以了解我们是否可以返回并等待来自 Chromium 的回复。

Hang #1的情况下,原因可能在于您尝试执行的 JavaScript 代码。如果 JavaScript 代码包含无限循环,则可能需要一段时间才能完成执行。因此,请检查您执行的 JavaScript 代码。

Hang #2的情况下,如果您看到此功能卡了一段时间,原因可能是死锁或 Chromium 引擎由于某种原因卡住并且没有回复(Chromium 代码中可能出现死锁)。

于 2016-09-28T10:19:22.147 回答