Execution environment for javafx.scene.web
Anton Tarasov
anton.tarasov at oracle.com
Fri Feb 6 13:13:53 UTC 2015
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