Execution environment for javafx.scene.web

Kevin Rushforth kevin.rushforth at oracle.com
Fri Feb 6 15:44:25 UTC 2015

Additionally, if you aren't going to display the primary Stage in the 
Application start(Stage) method then I also recommend you call:


in the start method, since you will need to control the life-cycle of 
the application yourself and call Platform.exit() to exit the FX runtime.

-- Kevin

Anton Tarasov wrote:
> Hi Michael,
> Yes, WebEngine can be used separately from WebView.
> (See inline, please)
> On 05/02/15 02:53, Michael Pozhidaev wrote:
>> Hello everybody,
>> I am working on the technology representing the information in form
>> which adjusted to the perception of blind people. It is just as
>> an addition to usual screen readers.
>> For a long time there was a rather big problem, it is a web browsing. My
>> environment is implemented in Java but I was unable to get any web
>> browser features.Any web surfing activity was possible only if you are
>> using a fully functional browser, like Firefox, Chrome, etc.
>>  From time to time I looked for any browser implementations in Java but
>> everything what I got  never looked interesting. The picture totally
>> changed when I found javafx.scene.web. At a glance it looks like exactly
>> what I need!
>> The key feature which looks nice to me is a splitting a visualization 
>> and
>> a background engine. I need exactly the engine which manages DOM, can
>> execute JavaScript, sends all notifications and events, but don't take
>> care about graphical representation. The description for WebEngine class
>> says that it suits completely.
>> OK, but I would like to ensure that JavaFX itself suits as well. 
>> Meaning, may I
>> use WebEngine class without creating _*graphical*_ application? In other
>> words, what should the execution environment for WebEngine be?
>> There are two questions I would like to understand:
>> 1. Should I create a full graphical application in JavaFX traditions to
>> be able to use WebEngine? My application uses a speech feedback as a
>> main way to bring information to users. If it is required that I should
>> have a complete graphical scene for using WebEngine it would be bad news
>> for me.
> Well, you need to create a JavaFX application in order to start using 
> WebEngine,
> but you don't need to display any GUI (Stage, Scene etc.) on the screen.
> If that works for you, then basicly it may look as follows:
> import javafx.application.Application;
> import javafx.scene.web.WebEngine;
> import javafx.stage.Stage;
> import javafx.beans.value.ChangeListener;
> import javafx.beans.value.ObservableValue;
> import javafx.concurrent.Worker.State;
> public class MyWebApp extends Application {
>     static WebEngine web;
>     public MyWebApp() {}
>     public void start(Stage s) {
>         web = new WebEngine();
>         web.getLoadWorker().stateProperty().addListener(
>             new ChangeListener<State>() {
>                 public void changed(ObservableValue ov, State 
> oldState, State newState) {
>                     if (newState == State.SUCCEEDED) {
>                         System.out.println(web.getTitle());
>                     }
>                 }
>             });
>         web.load("http://javafx.com");
>     }
> }
> The "start" method is your entry point into the JavaFX App thread.
> That's where WebEngine must be created and managed, and you can't do 
> it anywhere else
> (that's why you need a JavaFX app even if you don't plan to use any 
> GUI stuff).
> You may also launch a JavaFX app tradittionally, via the "main" method:
> import javafx.application.Application;
> public class Main {
>     public static void main(String[] args) {
>         Application.launch(MyWebApp.class, args);
>     }
> }
> The "launch" method won't return untill JavaFX has exited, so you need 
> to start your base logic (start your worker threads) before this call.
> The way you access your WebEngine instance is either via its 
> associated listeners or via Platform.runLater():
> Platform.runLater(new Runnable() {
> public void run() {
>          System.out.println(MyWebApp.web.getLocation());
>      }
> });
> Both ways you do it on the JavaFX App thread.
> One more thing is that you should prevent JavaFX from auto-exit. This 
> happens after the last Stage is closed.
> As you don't have any Stage open, you should tell JavaFX that you want 
> it to continue until you explicitly request it to exit.
> This is what you need to call first from the "start" method:
> Platform.setImplicitExit(false);
> (Actually, WebEngine itself should prevent JavaFX from auto-exit, but 
> you're better to do that explicitly.)
>> 2. Do I understand correctly that JavaFX applications are able to be
>> launched just in Java Virtual Machine? Meaning, they do not need a
>> complete web browser, right? I found that javafx.scene.web using
>> webkit and it is OK. I am asking that the user shouldn't need opening 
>> a web
>> browser window and run JavaFX application in it, yes?
> What you're telling about is the "applet mode". You're not limited to 
> it. You can launch your JavaFX app as a standlone application.
> So, you don't need to open a browser.
>> Help me please! If these questions would be OK I would be able to
>> significantly improve my environment!
>> Thank you in advance! :))
> You're welcome!
> Regards,
> Anton.

More information about the openjfx-dev mailing list