【问题标题】:JCEF ICU Check FailedJCEF ICU 检查失败
【发布时间】:2016-04-13 20:42:46
【问题描述】:

在日食中让铬与 JCEF 一起运行时,我似乎一直在碰壁。我能够到达发现本机函数但仍然无法完成初始化的地步。我设置了 LD_PRELOAD 变量。我正在运行 MainFrame.java 类和自定义 Scala 代码,并且在每个中都遇到了相同的问题。有没有办法解决这个问题?

系统:

  • 操作系统:Ubuntu 16.04

  • JCEF 第 3 版

  • CEF 版本 3

  • Java Jdk 8

结构和配置:

一切都在二进制分布结构之下。我将 jars 作为库导入,将本机库路径添加到 jcef jar 并将其导入到我的项目中。

我使用环境变量设置运行配置:

  • 显示 = :0.0
  • LD_PRELOAD = /path/to/libcef.so

我的所有库和 *.pak 文件都位于 libcef.so 所在的子目录和子目录中(二进制分发版),chrome 沙箱和帮助程序也是如此。

代码和错误

以下代码失败:

  println("Generating Handlers")
  CefApp.addAppHandler(Handlers.getHandlerAdapter)
  private var settings = new CefSettings
  settings.windowless_rendering_enabled = useOSR
  println("Starting App")
  private final val cefApp : CefApp = if(commandLineArgs != null && commandLineArgs.size > 0) CefApp.getInstance(ChromeCommandLineParser.parse(commandLineArgs)) else CefApp.getInstance(settings)
  println("Creating Client")
  private final val client : CefClient = cefApp.createClient()

以下输出结果:

Starting
Generating Handlers
Starting App
Creating Client
initialize on Thread[AWT-EventQueue-0,6,main] with library path /home/XXXXX/jcef/src/binary_distrib/linux64/bin/lib/linux64
[0413/135633:ERROR:icu_util.cc(157)] Invalid file descriptor to ICU data received.
[0413/135633:FATAL:content_main_runner.cc(700)] Check failed: base::i18n::InitializeICU(). 
#0 0x7ff8fa94a62e base::debug::StackTrace::StackTrace()
#1 0x7ff8fa95f88b logging::LogMessage::~LogMessage()
#2 0x7ff8fd7588d4 content::ContentMainRunnerImpl::Initialize()
#3 0x7ff8fa857962 CefContext::Initialize()
#4 0x7ff8fa85775b CefInitialize()
#5 0x7ff8fa80a9b8 cef_initialize
#6 0x7ff8d6946914 CefInitialize()
#7 0x7ff8d690200f Java_org_cef_CefApp_N_1Initialize
#8 0x7ff8de207994 <unknown>

感谢所有帮助。谢谢

【问题讨论】:

    标签: java scala chromium-embedded


    【解决方案1】:

    我也遇到了很多问题,直到我在$jdk/bin directory 下创建了指向"icudtl.dat""natives_blob.bin""snapshot_blob.bin" 的符号链接,而不是$jdk/jre/bin

    现在我不再收到此错误。

    使用https://bitbucket.org/chromiumembedded/java-cef/wiki/BranchesAndBuilding中的例子

    我改变了这个...

    $ sudo ln -s /path/to/java-cef/src/third_party/cef/linux64/Resources/icudtl.dat /usr/lib/jvm/java-8-oracle/jre/bin/icudtl.dat
    
    $ sudo ln -s /path/to/java-cef/src/third_party/cef/linux64/Debug/natives_blob.bin /usr/lib/jvm/java-8-oracle/jre/bin/natives_blob.bin
    
    $ sudo ln -s /path/to/java-cef/src/third_party/cef/linux64/Debug/snapshot_blob.bin /usr/lib/jvm/java-8-oracle/jre/bin/snapshot_blob.bin
    

    到这里……

    $ sudo ln -s /path/to/java-cef/src/third_party/cef/linux64/Resources/icudtl.dat /usr/lib/jvm/java-8-oracle/bin/icudtl.dat
    
    $ sudo ln -s /path/to/java-cef/src/third_party/cef/linux64/Debug/natives_blob.bin /usr/lib/jvm/java-8-oracle/bin/natives_blob.bin
    
    $ sudo ln -s /path/to/java-cef/src/third_party/cef/linux64/Debug/snapshot_blob.bin /usr/lib/jvm/java-8-oracle/bin/snapshot_blob.bin
    

    【讨论】:

    • 对此感到抱歉。花了一段时间
    【解决方案2】:

    @dvlcube 给出的解决方案有效,但不舒服。您可以添加一些额外的逻辑来检测用户的环境,如果是 linux,您可以复制所需的文件 - 例如:

    您也可以创建符号链接,而不是复制:

    如果您不想在启动前指定与 linux 相关的环境变量,您也可以在运行时注入这些变量(如 LD_LIBRARY_PATHLD_PRELOAD):

    【讨论】:

      【解决方案3】:

      将库和资源放在一起

      CEF 预计 Resources 的内容与 libcef.dll/.so 所在的文件夹相同。与库相关,但与可执行文件无关。

      考虑将 CEF 分发的 ResourcesRelease 文件夹一起加入。

      【讨论】:

        猜你喜欢
        • 2019-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-25
        • 2016-05-31
        • 2017-07-31
        • 1970-01-01
        相关资源
        最近更新 更多