# JavaFX in Eclipse einbinden



## Albi_2020 (8. Mai 2021)

Hi,

ich möchte gerne in Eclipse JavaFX-Programme erstellen. Leider laufen diese aber nicht, da die main()-Methode Fehler auswirft und die Importe nicht funktionieren.

LG Sebastian


----------



## M.L. (8. Mai 2021)

Welche JDK / JRE und Eclipseversionen werden verwendet ?  Von der Standardlösung OpenJFX, GluonHq (1) (& GraalVM: https://jax.de/blog/javafx-in-einer-neuen-aera-mit-graalvm/ ) i.V. mit Maven / Gradle abgesehen, könnte ein Paralleleinsatz des Liberica SDK ( https://bell-sw.com/pages/downloads/ ) erwägenswert sein.

(1) https://blogs.itemis.com/after-eigh...afx-openjdk-mit-java-11-erfolgreich-aufsetzen


----------



## kneitzel (8. Mai 2021)

Ansonsten ist auch https://openjfx.io ein sehr guter Startpunkt, der die Möglichkeiten im Detail beschreibt. Also rein aus Eclipse mit separat installiertem SDK oder per Maven oder Gradle mit automatischem Laden der Abhängigkeiten.


----------



## Gelöschtes Mitglied 65838 (8. Mai 2021)

entweder du wandelst es in eine MAVEN Projekt um dann gehts ziemlich einfach...für Anfänger kann das schwer sein ..ich hatte es auch damals nicht verstanden

ANSONSTEN wäre eine Zusötzliche Möglichkeit ( ohne Gradle und Maven )
-> Oben auf preferences "User Library" eingeben und eine neue Library erstellen -> mit external Jars -> da gehst du auf dein Entizpptes Javafx ordner
-> dann lib Ordner da wählst du dann alle JARS aus und fügst sie hinzu
-> neues Java Projekt erstellen
-> package application erstellen und eine Main Klasse rein schreiben was extends Application hat
-> rechtsklick auf den Projekt Ordner -> Build Path -> Libraries -> Libary hinzufügen -> User Library -> diene FX Library hinzufügen
-> bei run configurations musst du angeben wo deine Main ist -> application.Main bzw application."deine MainKlasse"
gib also application."deine MainKlasse" ein und lass eclipse es durchsuchen dass die Verbindung auch stimmt
-> in deine Module Info kommt ungefähr sowas rein



```
module myApp {
    requires transitive javafx.graphics;
    requires transitive javafx.fxml;
    requires transitive javafx.controls;
    requires javafx.base;
    requires transitive javafx.media;
    requires javafx.web;
    exports application;
}
```

wenn du das exports NICHT hast importierst du das ganze aber schickst es nicht raus und dann fängt die Main immer zum weinen an XD
das exports vergessen die meisten


ich hoffe ich hab keinen schritt vergessen




Dann gibts Noch eine Möglichkeit Gluon hat eine Anleitung Geschrieben wei man mit VM Arguments die Bibliothek hinzufügt..weis nich obs die Anleitung noch gibt

M.L sein (1) link benutzt das VM Argument



PS: Falls du im Studium bist / es in der Schule Lernst ist mein Weg "in der Regel" der der von den Lehrern bneutzt wird... im nachhinein bin ich von meinem Prof bissl enttäuscht weil das maven projekt 10 mal schneller geht


----------



## Albi_2020 (8. Mai 2021)

Also:

1. aktuelle Eclipse IDE 2020-12 für Mac installiert
2. JDK 16.0 für Mac installiert und mit Eclipse verknüpft
3. JavaFX Mac OS X SDK Release 16 von Gluon heruntergeladen
4. In Eclipse unter Help -> Marketplace -> e(fx)Eclipse 3.7.0 installiert
5. Eclipse Neustart
6. unter File -> New Project -> JavaFX -> JavaFX Project   neues Testprojekt angelegt
7. Test -> src -> application -> Main.java ausgeführt und folgende Fehlermeldung erhalten:
 "Error occurred during initialization of boot layer - java.lang.module.FindException: Module Test not found"
8. unter Preferences -> Java -> Build Path -> User Libraries -> New -> "Name auswählen" -> Add External jars -> 8x jar-Dateien aus lib-Ordner von Gluon zugefügt -> Apply & Close
9. Test -> rechte Maustaste -> Build Path -> Add Libraries -> User Libraries -> Next -> "Name auswählen" -> Finish

Nun sollten eigentlich die Fehlermeldungen schon verschwinden....tun sie aber nicht

10. Test -> rechte Maustaste -> Build Path -> Configure Build Path -> Libraries -> unter Classpath eigene Bibliothek zufügen und speichern


----------



## Gelöschtes Mitglied 65838 (8. Mai 2021)

was steht in deiner Module info drin und wo liegt sie


----------



## kneitzel (8. Mai 2021)

Schau Dir bitte einmal das Getting Started von https://openjfx.io an. Da hast Du wirklich alles im Detail erklärt - incl. genauer Beschreibung, wo Du was in Eclipse eintragen musst.

Aber generell rate ich dazu, Projekte mit Maven oder Gradle zu verwalten. Da kann man dann deutlich einfacher helfen als in einer IDE zu erläutern / prüfen, ob Du überall wirklich die richtigen Einstellungen hast.


----------



## Gelöschtes Mitglied 65838 (8. Mai 2021)

in einem maven projekt muss man nur das als dependencies eintragen in der pom.xml


```
<dependencies>
      <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-controls -->
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>17-ea+9</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-graphics -->
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-graphics</artifactId>
        <version>17-ea+9</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-web -->
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-web</artifactId>
        <version>17-ea+9</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-fxml -->
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>17-ea+9</version>
    </dependency>
  </dependencies>
```

und schon gehts wenn man nichts in der Module info vergessen hat, das ist schon deutlich angenehmer 
der erste Teil der Pom wird dir eh von eclipse erzeugt musst nur noch das hinzufügen


ob man dann noch spezielle dependencies für linux und mac einbauen muss weis ich leider nicht


----------



## Albi_2020 (8. Mai 2021)

Joreyk hat gesagt.:


> was steht in deiner Module info drin und wo liegt sie


wo finde ich denn die Info´s


----------



## Gelöschtes Mitglied 65838 (8. Mai 2021)

eine module info ist eine datei die in deinem src package liegen sollte


zeig doch mal deinen Projekt aufbau als screenshot

mit deiner module info sobald du sie gefunden hast


----------



## kneitzel (8. Mai 2021)

Evtl. hast Du auch einfach keine module-info.java. Dann hättest Du ein anonymes Modul. Das ist auch prinzipiell ok. Die ganzen requires und exports sind dann auch unnötig, denn das anonyme Modul hat automatisch ein require auf alle vorhandenen Module und ein export auf alle Namespaces.

So lange Du kein "opens" benötigst, weil der FXMLLoader deine Controller per deep reflection auslesen muss und Du auch kein jlink nutzen willst, ist das alles kein Problem.

Ansonsten noch einmal der Hinweis auf das Getting Started auf openjfx.io. Da ist es wirklich Schritt für Schritt erläutert und Du kannst Dir auch genau raussuchen, was Du machen willst. Bei Maven wäre mein Ratschlag auch, das entsprechende Plugin zu nutzen. Und falls Du da die Dependencies von Joreyk übernimmst: Die Version 17-ea+9 ist bestimmt nicht, was Du nutzen willst!


----------



## Gelöschtes Mitglied 65838 (8. Mai 2021)

kneitzel hat gesagt.:


> Evtl. hast Du auch einfach keine module-info.java. Dann hättest Du ein anonymes Modul. Das ist auch prinzipiell ok. Die ganzen requires und exports sind dann auch unnötig, denn das anonyme Modul hat automatisch ein require auf alle vorhandenen Module und ein export auf alle Namespaces.
> 
> So lange Du kein "opens" benötigst, weil der FXMLLoader deine Controller per deep reflection auslesen muss und Du auch kein jlink nutzen willst, ist das alles kein Problem.
> 
> Ansonsten noch einmal der Hinweis auf das Getting Started auf openjfx.io. Da ist es wirklich Schritt für Schritt erläutert und Du kannst Dir auch genau raussuchen, was Du machen willst. Bei Maven wäre mein Ratschlag auch, das entsprechende Plugin zu nutzen. Und falls Du da die Dependencies von Joreyk übernimmst: Die Version 17-ea+9 ist bestimmt nicht, was Du nutzen willst!


warum nicht hatte sie genommen weil es bei maven ganz oben war welche sollte man denn benutzen


----------



## kneitzel (8. Mai 2021)

EA steht für early access.

Ich würde also die letzte stable nehmen also eine 16er.

EA (Early Access), RC (Release Candidate) und was es da sonst noch so gibt sollte man nur nutzen, wenn man es braucht (weil wichtige neue Features oder so drin sind) oder man da aktiv mitarbeitet (also testen will oder so).

Aber gerade wenn man noch Probleme hat, überhaupt sein Projekt aufzusetzen, dann ist das ungünstig.

Also für den TE wäre das eher nichts und auf den war das bezogen. Du magst da ja durchaus Gründe für haben, ...


----------



## Albi_2020 (8. Mai 2021)

Joreyk hat gesagt.:


> eine module info ist eine datei die in deinem src package liegen sollte
> 
> 
> zeig doch mal deinen Projekt aufbau als screenshot
> ...


----------



## Gelöschtes Mitglied 65838 (8. Mai 2021)

hover über javafx javafx.controls
kommt dann "fix project setup" dann wird dir vorgeschlagen die von dir erstellte User Library hinzuzufügen
jaFX ist eine von mir erstellte user libary mit den fx jars


eig musst du nur 
1. neues jfx projekt erstellen
2. über controls hovern 
3. fix setup
4. library hinzufügen
5. fertig


----------



## Albi_2020 (8. Mai 2021)

Joreyk hat gesagt.:


> hover über javafx javafx.controls
> kommt dann "fix project setup" dann wird dir vorgeschlagen die von dir erstellte User Library hinzuzufügenAnhang anzeigen 15325
> jaFX ist eine von mir erstellte user libary mit den fx jars
> 
> ...


super...jetzt sind die Fehler weg....der Tip mit der Modul-info.java war Goldwert.

Allerdings sollte mir Eclipse beim Ausführen der main ein leeres Fenster anzeigen. Leider sehe ich das nicht. Gibt es dafür auch noch ein Trick?


----------



## Gelöschtes Mitglied 65838 (8. Mai 2021)

Albi_2020 hat gesagt.:


> super...jetzt sind die Fehler weg....der Tip mit der Modul-info.java war Goldwert.
> 
> Allerdings sollte mir Eclipse beim Ausführen der main ein leeres Fenster anzeigen. Leider sehe ich das nicht. Gibt es dafür auch noch ein Trick?


was siehst du im Moment und was möchtest du haben ich verstehs nich..


----------



## Albi_2020 (8. Mai 2021)

eigentlich sollte beim starten der main ein leeres Frame bzw. Button erscheinen


----------



## Gelöschtes Mitglied 65838 (8. Mai 2021)

nich ganz informier dich mal über 
Layouts
Scene 
und Stage
und Nodes
und dann wenns probleme gibt mach einen neuen thread auf dieser ist von der thematik abgeschlossen


----------



## Albi_2020 (10. Mai 2021)

noch eine Frage:

ich möchte gerne die Dokumentation der Klasse Stage öffnen: leider bekomme ich folgende Fehlermeldung (s.u.)...wo kann ich das einstellen?

LG Sebastian


----------



## Gelöschtes Mitglied 65838 (10. Mai 2021)

bei mir gehts so in Eclipse
Über Klasse hovern ->
unten beim Kästchen is ein Kleiner Button mit "open Declaration" ->
drauf klicken -> du bist in der Klasse drin

falls das ist was du möchtest


----------



## Albi_2020 (10. Mai 2021)

ich meine den kleinen Button daneben "Angehängtes Javadoc in einem browste öffnen"


----------



## Gelöschtes Mitglied 65838 (10. Mai 2021)

puh das weis ich nicht


wenn es wegen dem fehler ist "no enhanced javadoc..." wenn du drüber hoverst kannst du

e(fx)clipse rein laden
das holt dir dann die "javadocs" -> also kurz beschreibung keine direkte dokumentationensondern nur kurze API beschreibungen

how should i add JavaFX API documentation to eclipse? - Stack Overflow


ganz unten vom thread wird auch noch ein Download angeboten aber KA ob der das bewirkt was du möchtest


----------

