Page 1 of 1

Updated Tutorial For Eclipse JCEF

PostPosted: Tue Apr 12, 2016 5:24 pm
by asevans48
I am trying to run JCEF in Eclipse with Scala for continuity with other programs using network, ETL; etc. My goal is to be able to obtain data over a network that is causing other tools to break while avoiding a memory leak I have been experiencing in Selenium. I was able to get the tool working outside of eclipse. However, before I even get to run the code, a check fails. I tried printing messages in main and my class and they never appear. Is there a way to resolve the following issue with my below listed system specs?

I should also note that I have looked at other posts on this site and Googled, attempting solutions to no avail.

Setup

    IDE: Eclipse Mars
    Jars: Placed in a library known as chromiu. All jars requested by README.txt were added (jogl-all,jogl-all-natives-linux-amd64,jcef,gluegen-rt-natives-linux-amd64,gluegen-rt)
    DLL: Placed in jcef.jar
    JDK: 1.8.0_77
    Scala : 2.11.7


Also all symlink were made as requested by JCEF's Quick Start Guide and the build tool. I checked and there is data in this files.


Sample Code

class Browser(startUrl : String,commandLineArgs :List[String] = null, useOSR : Boolean = OS.isLinux(), isTransparent : Boolean = false,sleepTimeMillis : Long = 10,ignoreCertificateErrors : Boolean = false) extends JFrame{
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)
private final val client : CefClient = cefApp.createClient()
private final val browser : CefBrowser = client.createBrowser(startUrl,useOSR, isTransparent)
private final val browserUI = browser.getUIComponent
println("Making Visible")
pack()
setSize(800,600)
setVisible(true)
addWindowListener(Handlers.getDefaultWindowListener(this))
......

OTHER CODE HERE
......

}

object Driver{
def main(args : Array[String]):Unit={
println("Starting")
val br = new Browser("https://www.google.com")
println("Quiting")
br.quit()
}
}

I get the same error with MinFrame.java, written by the JCEF folks.

Error

initialize on Thread[AWT-EventQueue-0,6,main] with library path /path/to/jcef/src/binary_distrib/linux64/bin/lib/linux64
[0412/153531:FATAL:content_main_runner.cc(662)] Check failed: base::allocator::IsAllocatorInitialized().
#0 0x7fb1af87262e base::debug::StackTrace::StackTrace()
#1 0x7fb1af88788b logging::LogMessage::~LogMessage()
#2 0x7fb1b2680860 content::ContentMainRunnerImpl::Initialize()
#3 0x7fb1af77f962 CefContext::Initialize()
#4 0x7fb1af77f75b CefInitialize()
#5 0x7fb1af7329b8 cef_initialize
#6 0x7fb1aa22b914 CefInitialize()
#7 0x7fb1aa1e700f Java_org_cef_CefApp_N_1Initialize
#8 0x7fb1fd015994 <unknown>

System

    OS: Ubuntu 16.04 Xenial

    JCEF : Latest from bitbucket

    CEF Binary Branch : 2623 (just under the development branch)

    Java: java 8 oracle at /usr/lib/jvm/java-8-oracle

Re: Updated Tutorial For Eclipse JCEF

PostPosted: Wed Apr 13, 2016 2:27 am
by magreenblatt
You need to run with LD_PRELOAD=/path/to/libcef.so

Re: Updated Tutorial For Eclipse JCEF

PostPosted: Wed Apr 13, 2016 3:23 pm
by asevans48
That worked but now I am getting a different error. Any idea what is wrong?

Code: Select all
[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>


The closest answer for this I found was with cefSharp which stated to place .pak files in the same directory as the library. I triple checked the links. Everything is in the same directory. However, the check still fails.

Re: Updated Tutorial For Eclipse JCEF

PostPosted: Thu Apr 14, 2016 2:40 am
by magreenblatt
You're missing the icudtl.dat file. To simplify things lets continue the conversation in this thread instead of the other thread.

Re: Updated Tutorial For Eclipse JCEF

PostPosted: Mon Apr 18, 2016 4:42 pm
by asevans48
Ok. I didn't see your above post. However, I am still getting the ICU error. I will post a rather full report below just in case.

I need to use Java 8, specifically the jdk and have jdk 1.8.0.72.

My OS is Ubuntu 16.04 Xenial.

I get the following error but:
Code: Select all
[0418/152415:ERROR:icu_util.cc(157)] Invalid file descriptor to ICU data received.
[0418/152415:FATAL:content_main_runner.cc(700)] Check failed: base::i18n::InitializeICU().
#0 0x7ff5819cc62e base::debug::StackTrace::StackTrace()
#1 0x7ff5819e188b logging::LogMessage::~LogMessage()
#2 0x7ff5847da8d4 content::ContentMainRunnerImpl::Initialize()
#3 0x7ff5818d9962 CefContext::Initialize()
#4 0x7ff5818d975b CefInitialize()
#5 0x7ff58188c9b8 cef_initialize
#6 0x7ff55da6d914 CefInitialize()
#7 0x7ff55da2900f Java_org_cef_CefApp_N_1Initialize
#8 0x7ff565289994 <unknown>



Here is what I did that I though would put icudtl.dat on the path:

Without Maven using a New 64 bit Version of Eclipse due to an Eclipse Update
    1. Remove symlinks
    2. Remove all traces of cef and jcef
    3. Redownload jcef and extract cef binaries of the appropriate version (2623)
    4. Remake Symlinks
    5. Add all jars from the binary_distrib/linux64/bin folder except jcef-tests.jar {gluegen-rt,gluegen-rt-natives,jogl-all,jogl-all-natives,jcef}
    6. Add native library path to binary_distrib with libcef.so, icudtl.dat, snapshot_blob.bin; natives_blob.bin to the jcef.jar library path
    7. Double check the symlinks. They are present.
    8. Setup a new Java Project
    9. Set LD_PRELOAD to the libcef.so file in ~/jcef/src/third_party/native/Release/libcef.so
    10. Attempt to run the project. Fail!
    11. Set LD_PRELOAD to the libcef in the binary_dstrib folder ~/jcef/src/binary_dstrib/linux64/bin/lib/linux64/libcef.so
    12. Try 6-11 with the jcef_build path containing the libraries and finally the cef path without most of them to see what happened (the latter produces an expectedly different error)
    13. Attempt again and fail!

Install With Maven and Try Again

    1. Remove symlinks
    2. Remove all traces of cef and jcef
    3. Redownload jcef and extract cef binaries of the appropriate version (2623)
    4. Remake Symlinks
    5. create an environment variable to the binary_distrib directory and set in path mvn install:install-files -Djarfile=XXXX.jar for gluegen-rt,gluegen-rt-natives,jogl-all,jogl-all-natives;jcef
    6. Setup a new Maven Project
    7. Add all jars to dependency (worked)
    8. Set LD_PRELOAD to the libcef.so file in ~/jcef/src/third_party/native/Release/libcef.so
    9. Attempt to run the project. Fail!
    10. Set LD_PRELOAD to the libcef in the binary_dstrib folder ~/jcef/src/binary_dstrib/linux64/bin/lib/linux64/libcef.so
    11. Try 8-9 with the jcef_build path containing the libraries and finally the cef path without most of them to see what happened (the latter produces an expectedly different error)
    12. Attempt again and fail!

Any idea on how to resolve this? Any help is appreciated.

Thanks

Re: Updated Tutorial For Eclipse JCEF

PostPosted: Wed Apr 20, 2016 10:18 am
by magreenblatt
On Linux it should find icudtl.dat via the symlinks. Try creating the symlinks next to the eclipse executable.