JavaFX Bibliotheken modular einbinden

gottfried

Mitglied
Hallo
Es geht um ein Problem, wie es hier vor über einem Jahr schon einmal diskutiert wurde. Ein vorhandes, mit Netbeans, Ant und Java 8 gebautes JavaFX-Projekt mit openjdk11 und openjfx zum Laufen zu bringen. Ähnlich wie dort beschrieben:
https://www.java-forum.org/thema/ja...he-ivy-einbinden-java-11.190556/#post-1242215
bin auch ich soweit gekommen, dass es mit run in Netbeans lief, die .jar aber nicht zu starten ist:
Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen
Die im obigen Beitrag gefundene Lösung soll ja auf einem Bug beruhen, weshalb ich sie nicht nutzen wollte. Ich habe die verschiedenen Möglichkeiten auf
https://openjfx.io/openjfx-docs/
durchgelesen und einiges probiert, am Weitesten bin ich mit Modular from IDE gekommen. Die in das neu erstellte Projekt einzufügende Klasse habe ich so genannt, wie im alten Projekt, Netbeans geschlossen und alles (Controller, FXML-Files, CSS-File) dort eingefügt. Nach dem erneuten Öffnen sieht das Ganze schon ganz gut aus, es fehlen nur noch einige Bibliotheken (ApacheFOP, PostgreSQL-Treiber), die im alten Projekt als .jar eingebunden und im Ordner lib zu finden waren. Einen Ordner lib gibt es im Projektordner nicht, wie kann ich diese nun sauber einbinden und sicherstellen, dass sie bei Weitergabe des Projekts auch gefunden werden?
Danke und viele Grüße
 
Ich habe jetzt verstanden, dass Du das Projekt in Netbeans erstellt hast und da die Punkte, die da unter Modular from IDE aufgeführt wurden, verfolgt hast.

Da war in Punkt 2 doch das Hinzufügen der Libraries - da solltest Du auch die anderen Libraries hinzufügen können.

Generell würde ich hier aber auch erneut dazu raten, doch auf ein Projektmanagement-Tool wir Maven oder Gradle um zu steigen - alleine schon, damit man Einstellungen einfach über das Forum teilen kann.
 
@KonradN
Danke für deine schnelle Reaktion. Du schreibst:
Da war in Punkt 2 doch das Hinzufügen der Libraries - da solltest Du auch die anderen Libraries hinzufügen können.
Genau, aber wo stelle ich sie bereit und zwar so, dass sie bei Weitergabe des fertigen Projekts auch verfügbar sind. In der Anleitung wird z.B. gesagt, die JavaFX SDK nach $HOME/Downloads herunterzuladen, zu entpacken und von da einzubinden. Das heißt doch, der Ordner javafx-sdk-17 muss dann auf einem anderen Rechner auch dort zu finden sein? Oder irre ich mich da?
Dein Hinweis zu Maven oder Gradle: Für ein neues Projekt ja, aber für das Vorhandene schien mir dieser Weg einfacher.
Gottfried
 
Ok, also zur Laufzeit - das kannst Du die natürlich auch irgendwo ablegen und dann einbinden.

Das ist aber alles viel zu komplex. Bis Java 8 war der übliche Weg, java Applikationen als jar File weiter zu geben. Aber das hat sich mit Java 9 geändert - da wird ein sogenanntes Image erstellt, d.h. es wird eine Verzeichnisstruktur gebaut in dem alles enthalten ist.

Ab Java 14 ist dann auch das Tool jpackage dazu gekommen und man kann ein Binary Image bauen oder einen Installer. Dann wird kein Startscript mehr ausgeführt sondern eine exe (Das hat diverse Vorteile).

Und diese Dinge lassen sich per Maven und Gradle relativ einfach konfigurieren und machen und Du musst Dich deutlich weniger mit diesem ganzen "Müll" herum schlagen. Zumal das eine Hölle ist, das dann auch noch bei Kunden zu unterstützen. Und so ein bestehendes Projekt ist oft gar nicht so schwer zu migrieren.
 
Hallo
ich habe inzwischen einige Versuche gestartet, um lt. https://openjfx.io/openjfx-docs/ ein helloFX Projekt mit Maven oder Gradle zu erstellen, aber es gelingt mir nicht. Es beginnt schon damit, dass die Netbeans-Dialoge von Netbeans12.6 nicht mit den dort abgebildeten Dialogen übereinstinmmen und es endete an der Stelle, wo das neue Projekt gespeichert und geöffnet werden soll. Dort kommt eine Meldung, sinngemäß: das project unter /pfad/zu/hellofx konnte nicht gefunden/geöffnet werden. Der dann inaktive Dialog schließt sich auch nicht, ich muss Netbeans schließen.
wenn du es schaffst mit maven oder gradle, dann hast du gleich die modernen systeme auch gelernt
ist ein gut gemeinter Hinweis, aber in meinem Alter (77) nicht so einfach umzusetzen. Ich würde deshalb gern mit dem eingangs genannten Projekt weitermachen, was ja teilweise funktioniert und auf die oben gestellte Frage zurückkommen:
Wie kann ich die benötigten JARs fop.jar, postgresql.jar und xmlgraphics.jar einbinden? Die JavaFX Bibliothek ist global eingebunden, in den Projekt-Properties als Modul hinzugefügt und ist im Projekt unter Libraries sichtbar. Run innerhalb Netbeans funktioniert, zeigt meinen Anmelde-Dialog und bringt erst dann den erwartbaren Fehler, da ohne postgres-Treiber die Daten aus der DB nicht geladen werden können. Meine vielen Versuche, die fehlenden Bibliotheken einzubinden, gelangen nicht.
 
Nur zum Verständnis:
Das Problem ist das Einbinden zur Entwicklungszeit. Du entwickelst die Applikation, kannst diese aus Netbeans heraus aufrufen und das Problem existiert nur bei der Nutzung der jar Datei außerhalb von Netbeans?

Oder ist das Problem das Eibinden direkt in NetBeans, damit Du bei der Entwicklung auf diese Bibliotheken zugreifen kannst?
 
Hallo KonradN
Das Problem tritt schon innerhalb Netbeans auf. Ich habe z.B. versucht, die betreffenden Bibliotheken im Dialog Project-Properties --> Libraries --> Modulepath + hinzuzufügen, das geschieht auch, aber danach sind sie trotzdem links im Baum nicht enthalten. Auch dann nicht, wenn ich sie an gleicher Stelle unter Classpath + einfüge. Die rot markierten import-Anweisungen bleiben.
 
Hallo
In einem meiner Java-Bücher habe ich unter Migrationsszenarien den Hinweis gefunden, dass ein Hinzufügen bestehender JARS zum Modulepath nicht erfolgt, wenn diese Minuszeichen im Namen haben. Dort wird ein Umbenennen vorgeschlagen, das Minus durch einen Punkt zu ersetzen und so mit requires in die module-info.java einzutragen. Das habe ich getan und der letzter Stand ist:
Die fop.jar, postgresql.jar und xmlgraphics.jar sind eingebunden und unter Libraries im Projektbaum sichtbar.
Die rot markierten import-Anweisungen sind aber immer noch da und zeigen folgenden Hinweis:
package java.sql is not visible (package java.sql is declared in module.java, but module tsbstart does not read it)
 

Zurück
Oben