2016-04-13 13 views
1

Кажется, что я постоянно сталкиваюсь со стенкой, получая хром, работающий с JCEF в затмении. Я смог дойти до точки, где обнаружены нативные функции, но я до сих пор не могу завершить инициализацию. Я установил переменную LD_PRELOAD. Я запускаю как класс MainFrame.java, так и пользовательский код Scala и запускаю одну и ту же проблему в каждом. Есть ли способ разрешить это?Ошибка ICU ICU Ошибка

система:

  • ОС: Ubuntu 16,04

  • JCEF версия 3

  • CEF версия 3

  • Java Jdk 8

Структура и конфигурация:

Все под бинарной структуры распределения. Я импортировал банки как библиотеку, добавил путь к исходной библиотеке в jcef jar и импортировал ее в свой проект.

I Настройка конфигурации запуска с переменными окружения:

  • дисплей =: 0,0
  • LD_PRELOAD = /path/to/libcef.so

Все мои библиотеки и *. Файлы pak находятся в том же каталоге и в подкаталоге, где находится libcef.so (двоичный дистрибутив), а также хром-песочница и помощники.

код и ошибки

код не удается после следующих действий:

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> 

Вся помощь ценится. Благодаря

ответ

5

У меня было много проблем с этим тоже, пока я не создал символические ссылки на "icudtl.dat", "natives_blob.bin" и "snapshot_blob.bin" под $jdk/bin directory, вместо $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 
+0

спасибо я постараюсь это, и пусть вы знаете –

+0

сожалеет об этом. потребовалось некоторое время –

0

Keep библиотека и ресурсы вместе

CEF ожидает Resources содержимое находится в той же папке, где находится libcef.dll/.so. Связано с библиотекой, но не с исполняемым.

Рассмотрите возможность присоединения Resources и Release папки с распределением CEF вместе.

0

Решение, которое @dvlcube дало работы, но это не удобно. Вы можете добавить некоторую дополнительную логику для обнаружения среды пользователя, и если это Linux вы можете скопировать необходимые файлы - пример:

Вместо копирования вы также можете создать символические ссылки:

Если вы не хотите указывать связанные с linux environm лор переменных перед запуском, вы можете также вводить эти переменные (как LD_LIBRARY_PATH и LD_PRELOAD) во время выполнения: