How do I use JavaFX 11 in Eclipse?

27,908

Solution 1

There are multiple points in your post which needs clarification. I will try to answer them in different bullet points:

But as far as I understood, it(JavaFX) was excluded from JDK 9.

JavaFX will be decoupled from Oracle JDK starting JDK 11. I stress on Oracle JDK because JavaFX was never a part of OpenJDK. Not even in OpenJDK 8.

I'm actually using OpenJDK 11 on Ubuntu 18 (Though eclipse writes I have JavaSE 10 environment, that is where I'm also a bit confused)

For Java 11 support in Eclipse, you need to install Java 11 Support for Eclipse Photon plugin.

Here are a few Examples on how to run Java 11 applications in Eclipse

I installed openjfx using sudo apt install openjfx and I can't make eclipse work with JavaFX.

I'm not sure if there's any sense not to use JDK 8 with included JavaFX, but anyway, how can I use JavaFX in such conditions in eclipse?

Since OpenJDK 11 or Oracle JDK 11 will not come bundled with JavaFX, your best bet is to either download the JavaFX SDK from here or here and load them in your IDE.

If you are used to build tools, you can directly use the JavaFX runtime jars which are available in Maven Central.

For a tutorial on how to run JavaFX 11 on OpenJDK 11, you can follow:

JavaFX 11 and Eclipse

At the time of writing this post, you need Eclipse 4.9M3 to work with JavaFX 11.

Once you have eclipse, JDK 11 and JavaFX 11 SDK, you can either opt to create:

  • Module based project
  • Non-module based project (No module-info.java required)

Module based Project

Create a Java project and add JavaFX jars from the Java FX 11 SDK to the module path of the project.

enter image description here

Create a module.info and declare its dependency of javafx.controls module. javafx11 is the name of the package which contains your Java file.

module javafx11 {
    requires javafx.controls;
    exports javafx11;
}

Run the program \o/

Non-module based Project

Create a Java project and add JavaFX jars from the Java FX 11 SDK to either the module-path or classpath of the project.

Add the following JVM args to the run configuration of the project:

--module-path=path-to-javafx-skd/lib --add-modules=javafx.controls

Run the program \o/

Solution 2

tl;dr

To most easily get started with JavaFX, use the Oracle-branded release of Java 8 where JavaFX 8 is bundled and easily available.

For technical details, see Using JavaFX in JRE 8. Look to the Linked and Related sections of the web page for many related postings.

Java Modularization

The Java platform is in the process of a sweeping reformulation, known as modularization.

Previously, Java SE (standard edition) was one big monolith of software, ever-growing with more and more being added. No single app ever uses all of it.

A decision was taken to break Java SE into many separate chunks to be defined formally as “modules”. One major benefit is that an app may be bundled with a Java SE runtime composed of only the modules actually needed, with unused modules omitted. See the jlink tool.

As a byproduct of this modularization, some older and less-popular parts such as CORBA are being dropped, to no longer be carried as a standard part of Java (though offered for other parties to pick up if they so decide). Similarly, some Java EE related modules will be removed from Java SE and turned over to the Jakarta EE project, logically a more appropriate home. See JEP 320: Remove the Java EE and CORBA Modules.

The process of modularization and reorganization is a years-long ongoing effort. Much was done in Java 9 and Java 10. Some of the final steps are being done in Java 11.

One of these steps being taken in Java 11 is to cease bundling JavaFX with Java SE. See:

So getting started with JavaFX development right now will be easiest if done with Java 8. The JavaFX libraries are bundled in with Java 8. And you need not learn about modularization, nor need to wrestle your IDE (such as Eclipse) and project settings to recognize modules. If you do not have a pressing need to use the very last versions of Java or JavaFX, stick with 8 until the modularization process and tools gets smoothed out, likely next year 2019.

If you insist on using Java 11, you need to learn about:

  • Java modularization in general, including the module-info.java file.
  • Updating your IDE (Eclipse, etc.) and other tools to later versions supporting both modularization and Java 11.
  • Configuring modules in your build tools, such as Maven or Gradle
  • Configuring modules in your IDE, such as Eclipse
  • Downloading JavaFX modules, or using a dependency manager such as Maven to do so

Those points are too much to cover here, and have been covered in many other Questions on Stack Overflow. Besides, Java 11 has not yet been formally released.

Perhaps this article will help, How to Create a Project With JavaFX on JDK 11.

To learn much more about Java modularization, read the blog and the book, The Java Module System, by Nicolai Parlog.

Solution 3

I've had to struggle through this on about 20 computers now, so I made the following checklist:

[ ] download javafx11 from javafx11's website, put on desktop
[ ] create a MODULE based project
[ ] right click project, go to BUILD PATH
[ ] add the downloaded javafx.base/control/graphics as external jar files
[ ] put the files in a package (eg: my_big_package)
[ ] put the following in the module.java file:
module javafx11 {
    requires javafx.controls;
    exports my_big_package;
}
[ ] eat a donut from the break room

If you're not married to Eclipse and/or just trying to learn (or are a student with an unhelpful professor/TAs), BlueJ currently has JavaFX already built into it and ready to go, so no extra setup or download is necessary. Neat!

Share:
27,908
Alex Chashin
Author by

Alex Chashin

Updated on July 05, 2022

Comments

  • Alex Chashin
    Alex Chashin almost 2 years

    I have some trouble with JavaFX. I wanted to start creating apps, desktop or mobile, at least something. So I found out I could use the JavaFX library for it. But as far as I understood, it was excluded from JDK 9. I'm actually using OpenJDK 11 on Ubuntu 18 (though Eclipse writes I have the JavaSE 10 environment, that is where I'm also a bit confused) and I installed OpenJFX using sudo apt install openjfx and I can't make Eclipse work with JavaFX.

    I'm not sure if there's any sense not to use JDK 8 with the included JavaFX, but anyway, how can I use JavaFX in such conditions in Eclipse?

  • Alex Chashin
    Alex Chashin over 5 years
    Thank you very much, I was very confused about all that and probably didn't search enough on english sources (I'm from Russia and russian sources are ****)
  • Alex Chashin
    Alex Chashin over 5 years
    To be honest I'm kind of a beginner in this field, so I am actually not used to build tools. Anyway, I indeed managed to use javafx using <code>java</code> console command, thanks to your tutorials :D. Anyway I didn't manage to make eclipse see the javafx module. Can you give an advice on how to do it?
  • Alex Chashin
    Alex Chashin over 5 years
    I actually managed to add the javafx.controls.jar file to my project libs, but I don't understand, how can I use it because eclipse says "can't resolve the name...." when importing something
  • ItachiUchiha
    ItachiUchiha over 5 years
    As you don't want to use maven, I am hoping you have already downloaded the JavaFX SDK. You need add all jars in JavaFX SDK/lib to your eclipse library as shown here. I have updated the answer with eclipse sample to run Java 11 applications.
  • rli
    rli over 5 years
    If you are starting to use JavaFX it is not advisable to use Java 8. JavaFX has received many improvements and bug fixes that are not available (not backported) in Java 8.
  • GOXR3PLUS
    GOXR3PLUS over 5 years
    I still can't figure out how to add it in Eclipse , downloaded Java FX 11 SDK then how to add it on the classpath ? Add Library -> Then JavaFX Library ? It doesn't work ... please add some pictures for Non-module based Project.
  • Basil Bourque
    Basil Bourque almost 5 years
    That ZuluFX looks to be a nice resource, but has not yet been updated for JavaFX 12. Currently they offer JavaFX versions 8 and 11.
  • brat
    brat about 4 years
    I seem to have read somewhere that Oracle indeed did "give over" the JavaFX project to OpenJDK. Also I came across this site wiki.openjdk.java.net/display/OpenJFX . Not trying to be smart, just trying to understand, as a beginner I also get confused by the Java ecosystem.
  • ItachiUchiha
    ItachiUchiha about 4 years
    OpenJFX is still a part of OpenJDK. The various OpenJDK binaries just don't bundle it. Therefore, it needs to downloaded as a separate SDK/jars and needs to be added to the module-path.