JCEF Browser does not content; only blank screen on Eclipse

Having problems with building or using the JCEF Java binding? Ask your questions here.

JCEF Browser does not content; only blank screen on Eclipse

Postby a2646 » Thu Jan 20, 2022 9:29 pm

I have been trying to get the Java version of Chromium Embedded Framework (JCEF) to work on Eclipse for some time. I am able to verify that the library files are working correctly, since if I run the included sample class files on the VM, the program runs and some webpage is displayed. However, if I run the program from Eclipse, the program will always display a blank window. I am able to verify that the library binary jcef_helper.exe is successfully run, but not matter how I link the .jar files and other library files, the webpage will not generate and there will always be a blank screen. I cannot pinpoint the issue here. I tried specifying path, adding the JCEF library path of my OS environment variables PATH field to no avail. I have followed the documentation, even sample files behave the same way when I have anything to do with compilation/ run. One note of interest, my Eclipse console will display this during run:

Code: Select all
initialize on Thread[AWT-EventQueue-0,6,main]


Perhaps there is a thread issue?

Code in question:

Code: Select all
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
import org.cef.CefApp;
import org.cef.CefApp.CefAppState;
import org.cef.CefClient;
import org.cef.CefSettings;
import org.cef.browser.CefBrowser;
import org.cef.handler.CefAppHandlerAdapter;

public class WebV
{
    public static void main(String args[])
    {
        Dimension dispDimension = Toolkit.getDefaultToolkit().getScreenSize();
        int width = (int)Math.round(dispDimension.getWidth() / 2);
        int height = (int)Math.round(dispDimension.getHeight() / 2);

        CefApp.addAppHandler(new CefAppHandlerAdapter(null)
        {
            @Override
            public void stateHasChanged(CefAppState state)
            {
                if(state == CefAppState.TERMINATED)
                {
                    System.exit(0);
                }
            }
        });
        CefSettings settings = new CefSettings();
        settings.windowless_rendering_enabled = false;
        CefApp cefApp = CefApp.getInstance(settings);
        CefClient client = cefApp.createClient();
        CefBrowser browser = client.createBrowser("http://www.google.com", false, false);
        Component browserComponent = browser.getUIComponent();

        JFrame frame = new JFrame();
        frame.setTitle("WebV");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setSize(width, height);
        frame.setResizable(true);
        frame.setLocationRelativeTo(null);

        frame.add(browserComponent);
        frame.setVisible(true);
    }
}


Tested with both Java 17 and Java 8. Run on Eclipse, with VM args:

Code: Select all
-Djava.library.path=./bin/lib/win64


Any inupt would be greatly appreicated.
a2646
Newbie
 
Posts: 2
Joined: Thu Jan 20, 2022 9:22 pm

Re: JCEF Browser does not content; only blank screen on Ecli

Postby Yanovsky » Thu Feb 10, 2022 1:51 pm

Hello.
You need add MessageRouter to CefClient object.

MessageRouterHandler and MessageRouterHandlerEx you can find in tests project on https://github.com/chromiumembedded/java-cef

It should look something like this:
Code: Select all
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
import org.cef.CefApp;
import org.cef.CefApp.CefAppState;
import org.cef.CefClient;
import org.cef.CefSettings;
import org.cef.browser.CefBrowser;
import org.cef.handler.CefAppHandlerAdapter;

import org.cef.browser.CefMessageRouter;
import tests.detailed.handler.MessageRouterHandler;
import tests.detailed.handler.MessageRouterHandlerEx;

public class WebV
{
    public static void main(String args[])
    {
        Dimension dispDimension = Toolkit.getDefaultToolkit().getScreenSize();
        int width = (int)Math.round(dispDimension.getWidth() / 2);
        int height = (int)Math.round(dispDimension.getHeight() / 2);

        CefApp.addAppHandler(new CefAppHandlerAdapter(null)
        {
            @Override
            public void stateHasChanged(CefAppState state)
            {
                if(state == CefAppState.TERMINATED)
                {
                    System.exit(0);
                }
            }
        });
        CefSettings settings = new CefSettings();
        settings.windowless_rendering_enabled = false;
        CefApp cefApp = CefApp.getInstance(settings);
        CefClient client = cefApp.createClient();

        CefMessageRouter msgRouter = CefMessageRouter.create();
        msgRouter.addHandler(new MessageRouterHandler(), true);
        msgRouter.addHandler(new MessageRouterHandlerEx(client), false);
        client.addMessageRouter(msgRouter);

        CefBrowser browser = client.createBrowser("http://www.google.com", false, false);
        Component browserComponent = browser.getUIComponent();

        JFrame frame = new JFrame();
        frame.setTitle("WebV");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setSize(width, height);
        frame.setResizable(true);
        frame.setLocationRelativeTo(null);

        frame.add(browserComponent);
        frame.setVisible(true);
    }
}
Yanovsky
Newbie
 
Posts: 1
Joined: Thu Feb 10, 2022 1:35 pm

Re: JCEF Browser does not content; only blank screen on Ecli

Postby a2646 » Fri Feb 11, 2022 7:34 am

I am incredibly grateful that you've taken the time to reply. This solution has worked and everything is working as expected. This will help me greatly. Oddly enough, the sample java file for the simple usage case does not contain this code. I will make sure to notify the maintainer of this. Your solution has resolved the issue completely. Once again, thank you for this.
a2646
Newbie
 
Posts: 2
Joined: Thu Jan 20, 2022 9:22 pm

Re: JCEF Browser does not content; only blank screen on Ecli

Postby FriwiDev » Sun Feb 13, 2022 5:10 am

Maintainer of jcefmaven on GitHub.
FriwiDev
Techie
 
Posts: 41
Joined: Sun Jul 09, 2017 4:18 am


Return to JCEF Forum

Who is online

Users browsing this forum: No registered users and 23 guests