JavaFX JavaFX Anwendung deployen (entw als runnableJAR oder exe-Datei)

BigMemo007

Aktives Mitglied
Hallo liebes Forum,

ich habe mein Program soweit fertig. Hat natürlich bestimmt viele Fehler, aber ich würde es gerne erstmal deployen. Wie oben erwähnt, entweder als runnableJAR oder als exe. Es sollen auch User die App verwenden können, die keine Javaumgebung installiert haben. Das Deployment-Kit soll alles so zusammen packen, dass der user mit einem Doppelklick auf die Startdatei die App starten kann.

Ich nutze in Eclipse OpenJDK Version 14. Für JavaFX habe ich die open javafx-SDK Version 14 installiert. Leider haben beide für -fxbuild- die ant-Dateien nicht. Wenn ich dort das Builden probiere, kommt die Fehlermeldung

Could not load definitions from resource com/sun/javafx/tools/ant/antlib.xml. It could not be found.

Das liegt mMn wegen der fehlenden Ant-Implementierung bei meinen Versionen. Andere JDK versionen, z.B JDK 1.8.0_271 von Oracle - dort ist die Ant-Implementierung vorhanden - können mein Programm nicht starten. Es kommt eine "Fatall Error" die nichts aussagt, eben aus ein "Fatall Error".

Die normale runnableJAR klappt auch nicht, die man unter Export machen kann. Das Jar ist zwar über 8 MB groß, startet aber nicht. Es öffnet für eine Sekunde die Konsole und schließt die wieder ohne das weiter noch was passiert.

Was kann ich noch probieren?
 

Anhänge

  • Build_Path.JPG
    Build_Path.JPG
    135,1 KB · Aufrufe: 25
  • verzeichnis.JPG
    verzeichnis.JPG
    104,9 KB · Aufrufe: 20
  • export_runnableJAR.JPG
    export_runnableJAR.JPG
    104,5 KB · Aufrufe: 41
K

kneitzel

Gast
Also mein Ratschlag ist immer, auf Gradle oder Maven zu gehen. Da ist es relativ einfach um z.B. mittels jlink ein image zu bauen.

Der Vorteil ist dabei erst einmal, dass Du kein JavaFX selbst installieren / einbinden musst. Es wird durch gradle / maven wie eine normale Abhängigkeit eingebunden (Nicht ganz - es gehört noch etwas mehr dazu, aber das sind einfache kleine Einträge in pom.xml / build.gradle).

Ich habe dazu mal etwas geschrieben / aufgezeichnet: https://blog.kneitzel.de/2020/11/02/javafx-maven-und-gradle/
und

Generell braucht man da auch nicht viel zu wissen - so kannst Du einfach pom.xml oder build.gradle/settings.gradle kopieren (z.B. von https://github.com/kneitzel/blog-javafx-series und da aus einerm der 03er Ordner je nachdem ob es maven oder gradle sein soll) und etwas die Projektdaten anpassen. Sourcen ggf. noch verschieben (src/main/java wird halt für die java Dateien als Ort gewünscht).

Die IDEs unterstützen das, wenn es auf der Kommandozeile auch übersetzt werden soll, dann würde ich den jeweiligen wrapper empfehlen ...

Das einfach einmal von meiner Seite. Weitere Alternativen wären noch GraalVM (dann wird ein native image erzeugt) oder zusätzlich zu jlink noch die Nutzung von JPackage (ab JDK 14 verfügbar, baut einen Installer aus dem JLink Image)
 

BigMemo007

Aktives Mitglied
Danke dir ersteinmal für deinen Tip. Ich habe das Builden mit Maven versucht, aber ich komme nicht mehr weiter.

1. Ich habe in meinem Eclipse ein neues Maven-Projekt erstellt und meine Packages aus meinem JavaFX-Projekt in src/main/java rüberkopiert.

mavenProjektMeinePackagesAdded.JPG


2. Dann habe ich die pom.xml Datei nach deinen Vorgaben angebapsst.
XML:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.bigmemo</groupId>
  <artifactId>nogoindebt</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>nogoindebt</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>   
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
  </properties>

    <organization>
        <!-- Used as the 'Vendor' for JNLP generation -->
        <name>MI</name>
    </organization>

  <dependencies>
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-controls</artifactId>
      <version>11.0.2</version>
    </dependency>
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-fxml</artifactId>
      <version>11.0.2</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
          <release>11</release>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-maven-plugin</artifactId>
        <version>0.0.3</version>
        <configuration>
          <release>11</release>
          <jlinkImageName>nogoindebt</jlinkImageName>
          <launcher>nogoindebt</launcher>
          <mainClass>application.RunEinnAusgApp</mainClass>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

Da ich keine Module habe, habe ich in <mainClass> den Packagenamen.MainKlassenNamen eingetragen.


3. pom.xml abgespeichert und unter RunAs->maven.Install gemacht. Mit folgenden Meldungen

Wiki:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/Memo/.p2/pool/plugins/org.eclipse.m2e.maven.runtime.slf4j.simple_1.16.0.20200610-1735/jars/slf4j-simple-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [file:/C:/Users/Memo/eclipse/jee-2020-06/eclipse/configuration/org.eclipse.osgi/5/0/.cp/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/Memo/.p2/pool/plugins/org.eclipse.m2e.maven.runtime.slf4j.simple_1.16.0.20200610-1735/jars/slf4j-simple-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [file:/C:/Users/Memo/eclipse/jee-2020-06/eclipse/configuration/org.eclipse.osgi/5/0/.cp/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< com.bigmemo:nogoindebt >-----------------------
[INFO] Building nogoindebt 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ nogoindebt ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ nogoindebt ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ nogoindebt ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ nogoindebt ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ nogoindebt ---
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ nogoindebt ---
[INFO] Building jar: C:\Users\Memo\eclipse-workspace\nogoindebt\target\nogoindebt-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ nogoindebt ---
[INFO] Installing C:\Users\Memo\eclipse-workspace\nogoindebt\target\nogoindebt-1.0-SNAPSHOT.jar to C:\Users\Memo\.m2\repository\com\bigmemo\nogoindebt\1.0-SNAPSHOT\nogoindebt-1.0-SNAPSHOT.jar
[INFO] Installing C:\Users\Memo\eclipse-workspace\nogoindebt\pom.xml to C:\Users\Memo\.m2\repository\com\bigmemo\nogoindebt\1.0-SNAPSHOT\nogoindebt-1.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  5.843 s
[INFO] Finished at: 2020-12-06T20:29:02+01:00
[INFO] ------------------------------------------------------------------------


Mir ist aufgefallen, dass mein Maven-Projekt auf JDK Version 1.5 eingestellt war und deshalb die Fehlermeldungen in meinen Klassen aufgetaucht sind, weil 1.5 z.B. Lamdas usw nicht beherrscht.
Aber trotzdem erscheint der erstellte JAR-Container - BUILD ist ja SUCCESS - der in C:\home\.m2\repository\com\bigmemo\nogoindebt\1.0-SNAPSHOT erstellt wurde, mit 95kB zu klein. Hier kann unmöglich die JavaFX-Abhängigkeit und meine Klassen untergebracht sein.


jarcontainer.JPG

5. Ich habe im Build-Path die OpenJDK von Version 1.5 (war per default wohl drin) auf 11 eingestellt. Alle Fehler sind verschwunden. Eine neues maven-Install in RunAs gemacht mit folgenden Meldungen

Wiki:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/Memo/.p2/pool/plugins/org.eclipse.m2e.maven.runtime.slf4j.simple_1.16.0.20200610-1735/jars/slf4j-simple-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [file:/C:/Users/Memo/eclipse/jee-2020-06/eclipse/configuration/org.eclipse.osgi/5/0/.cp/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/Memo/.p2/pool/plugins/org.eclipse.m2e.maven.runtime.slf4j.simple_1.16.0.20200610-1735/jars/slf4j-simple-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [file:/C:/Users/Memo/eclipse/jee-2020-06/eclipse/configuration/org.eclipse.osgi/5/0/.cp/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< com.bigmemo:nogoindebt >-----------------------
[INFO] Building nogoindebt 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ nogoindebt ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ nogoindebt ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ nogoindebt ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ nogoindebt ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ nogoindebt ---
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ nogoindebt ---
[INFO] Building jar: C:\Users\Memo\eclipse-workspace\nogoindebt\target\nogoindebt-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ nogoindebt ---
[INFO] Installing C:\Users\Memo\eclipse-workspace\nogoindebt\target\nogoindebt-1.0-SNAPSHOT.jar to C:\Users\Memo\.m2\repository\com\bigmemo\nogoindebt\1.0-SNAPSHOT\nogoindebt-1.0-SNAPSHOT.jar
[INFO] Installing C:\Users\Memo\eclipse-workspace\nogoindebt\pom.xml to C:\Users\Memo\.m2\repository\com\bigmemo\nogoindebt\1.0-SNAPSHOT\nogoindebt-1.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  5.558 s
[INFO] Finished at: 2020-12-06T20:37:45+01:00
[INFO] ------------------------------------------------------------------------


Hier ist wieder der ausgespuckte JAR-Container nur 96kb groß. Ein doppelklick bewirkt nur ein 100 milisekündiges auploppen der Konsole. Mehr nicht.

In meinem ursprünglichen JavaFX projekt musste ich unter RunConfigurations->Arguments->VM arugments folgendes hinzufügen
--module-path "C:\Program Files\Java\openJava\javafx-sdk-14.0.1\lib"
--add-modules=javafx.base,javafx.controls,javafx.fxml,javafx.graphics,javafx.media,javafx.swing,javafx.web

Ich weiß nicht, ob man das in einem Maven-Projekt auch machen muss und wo. Wenn Maven die Abhängigkeiten automatisch einfügt (in meinem JavaFx-Pojekt musste ich ja die OpfenFX-Jars manuell einfügen und deshalb kann ich nachvollziehen, dass man die VM-Argumente anpassen muss) solle doch wohl das auch wenn nötig automatisch gehen.


Ich weiß nicht, was ich noch machen muss. Ich will einfach mein Projekt deployen. Soll ich mal mein Projekt als Zip hier hochladen?
 
K

kneitzel

Gast
Wenn Du das maven Projekt so gebaut hast, wie ich es in dem Video beschreibe, dann hast Du da ja das entsprechende Plugin auch mit drin.

Daher nutz doch die build Ziele vom javafx Plugin: javafx:jlink baut ein komplette image, welches du weiter geben kannst. Ich habe mich nicht zu intensiv mit Maven beschäftigt, da ich in der Regel Gradle nutze. Aber bei meinen Tests war das image immer voll funktionsfähig.
 

dzim

Top Contributor
Nur so als Hinweis im Nachtrag: Falls die Anwendung nicht vollständig modularisiert ist (ja, es gibt valide Gründe dafür, wir sind auf Arbeit in so einen Fall reingerannt: Abhängigkeit auf eine alte Library, die wohl nicht mehr geupdated wird - und wir werden *noch* keine Migration dafür machen, hängt zu viel dran), haben Dirk Lemmerman und Michael Paus mal ein Beispiel zusammengetragen, wie man eine App dennoch mit jlink und jpackage machen kann:


Wir verwenden es gemeinsam mit dem jeweils aktuellen Bellsoft Full JDK und sind ganz zufrieden.
 

BigMemo007

Aktives Mitglied
Also, ich hab so einiges ausprobiert, aber immer mit dem Ergebnis, dass zwar eine .jar kreiiert wird, aber die nur ein halbsekündiges aufploppen der Windows-Console bewirkt und sonst nichts.

Das was unbeding hätte funktionieren müssen war, dass ich in Eclipse ein neues Maven-Projekt mit folgendem archtype kreiirt habe:
GroupID: org.openjfx, ArtifactID: javafx-archtype-simple, Version 0.0.5

Die hat eine App.java Datei, die in meinem Eclipse startet und ein JavaFX Fenster mit einem Label der Java Version und JavaFX Version ausgibt. Also was grafisches.

Wenn ich die nun über RunAs instaliere, so wird eine meinvergebenername.jar datei unter target abgelegt. Wenn ich nun die doppelt anklicke, kommt das Fenster nicht. Funktioniert auf meinem Windows-System eventuell runnable Jars nicht? Gibt es sowas?

Das macht mich verrückt, dass ich das nicht hinkriege....(((
 

BigMemo007

Aktives Mitglied
Soll ich mal meine App als zip hier hochladen und ein Profi probiert das mit meiner Anwendung? Dann würde ich auch genau wissen, wie die pom.xml in meinem Fall auszusehen hätte. A und noch eine Sache. Ich nutze JDK 14 und javafx-sdk 14. Bei beiden ist die Datei javafxpackager nicht vorhanden. Ist das normal? Wenn ich es mit dem integrierten javafxpackager hätte probieren wollen, würde das auch nicht gehen. Bin zwar Anfänger in Sachen Packaging, aber so kompliziert hätten die Java-Entwickler das auch nicht machen müssen!!! :(((
 
K

kneitzel

Gast
Aber wenn ich das so lese, dann nutzt du mit dem archetyp das javafx-maven-plugin. Aber statt die Aufrufe des plugins zu nutzen, nutzt du ein einfaches mvn package oder so. Schau doch einfach mal unter https://github.com/openjfx/javafx-maven-plugin nach - da ist klar gegeben als goals:
javafx:run zum ausführen
javafx:jlink um ein image zu bauen

Das sind also die entsprechenden goals. Wenn Du ein package machst, dann kommt tatsächlich ein jar heraus, das nicht ausführbar ist.

Und auch das javafxpackager - das sagt mir so gar nichts - wonach suchst Du denn da? Meinst Du evtl. jpackage, das man nutzen kann um einen Installer zu bauen? Das wirst Du auch haben ...

Die Schritte sind dann relativ einfach:

mvn javafx:jlink
==>Dies baut in target das entsprechende image incl. batch-Script zum starten.

Dann in target kann man jpackage nutzen:
jpackage -n name --app-image ImageVerzeichnis
=> das sollte dir einen installer bauen (also auf Windows ein msi - benötigt das wix toolset)

jpackage --type app-image -n imageName -m modul/hauptklasse --runtime-image ImageVerzeichnis
=> das baut Dir ein Verzeichnis mit einer exe zum starten statt eben der .bat Datei

Ein einfaches Beispiel findest du unter https://github.com/kneitzel/blog-javafx-series/tree/master/03 helloworld - maven
Da ist zwar noch das plugin in 0.0.3 statt 0.0.5 und openjfy in 11.0.2 statt 14.02 enthalten, aber die Versionen sind ja einfach anpassbar. Oder du nimmst für das pom.xml einfach das folgende.
XML:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>de.kneitzel</groupId>
  <artifactId>hellofx</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>hellofx</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>   
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
  </properties>

    <organization>
        <!-- Used as the 'Vendor' for JNLP generation -->
        <name>K. Neitzel Blog</name>
    </organization>

  <dependencies>
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-controls</artifactId>
      <version>14.0.2</version>
    </dependency>
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-fxml</artifactId>
      <version>14.0.2</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
          <release>11</release>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-maven-plugin</artifactId>
        <version>0.0.5</version>
        <configuration>
          <release>11</release>
          <jlinkImageName>hellofx</jlinkImageName>
          <launcher>hellofx</launcher>
          <mainClass>HelloWorld.main/helloworld.HelloWorld</mainClass>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
Dann einfach in dem Verzeichnis mit dem Projekt auf der Kommandozeile ausführen (Dank maven wrapper brauchst Du nur das openjdk 14 in Deinem Pfad):
mvnw javafx:jlink
cd target
jpackage --type app-image -n hellofxapp -m HelloWorld.main/helloworld.HelloWorld --runtime-image hellofx

==> Du hast dann ein Verzeichnis hellofx mit bin/hellofx.bat das du starten kannst.
==> Desweiteren ein hellofxapp mit einem hellofx.exe das du starten kannst.
Diese Ordner kannst Du so weiter geben.



Dann noch ein Wort zum OpenJDK 14: Das ist veraltet. Wenn Du aktuelle Versionen nutzen möchtest, dann solltest Du dies auch machen, d.h. jetzt wäre 15 aktuell ... oder ,an geht einfach auf eine LTS Version - das wäre jetzt die 11. (Siehe zur Übersicht ggf https://en.wikipedia.org/wiki/Java_version_history)
 

dzim

Top Contributor
javapackager war das alte - pre-Module - Paketisierungstool (kam mit dem einzug von JavaFX in das Oracle JDK mit rein, glaube ich mich zu entsinnen). Ich weiss nicht, ob es direkt mit Java 9 rausgeflogen war, aber es gibt erst seit Java 14 wieder das offizielle, neue und Modul-aware jpackage.

Wie @kneitzel sagt, musst das compile und so schon über das das Plugin machen. Also mit dem javafx:* Präfix.

Was mir immer noch nicht klar ist: Ist denn deine Anwendung überhaupt richtig modularisiert? Also enthält sie die Datei module-info.java ?
Wenn nein: Dann kannst du javafx:jlink vermutlich vergessen, denn das Tool geht von einer modularisierten App aus, holt alle benötigten Module und baut eine Runtime mit genau den Abhängigkeiten. Daher müsstest du dann manuell so aufrufen, dass es weiss, welche Module es inkludieren soll. Wenn du erst mal ein Runtime-Image hast, kannst du den Rest von kneitzels jpackage Befehlen nutzen. Musst ihm halt nur sagen, wo das Image ist.

Bei jpackage auf Windows müsst ihr nur eins bedenken: Wenn ihr einen Installer bauen lasst, könntet ihr auf einen Bug stoßen. Wir installieren unsere App immer nur Lokal für den User (irgendwo im AppData - ich kümmere mich nicht um den Part und das OS), jpackage hat aber den Bug, es mit Umlauten (wahrscheinlich aber allen speziellen Zeichen) nicht klar kommt. Dann lässt sich die Anwendung von dort nicht starten. Also nur, dass ihr es im Hinterkopf behaltet.
 

BigMemo007

Aktives Mitglied
Danke schonmal für die vielen Informationen.

Wie schon gesagt, ich habe ein neues Maven-Projekt mit GroupID: org.openjfx, ArtifactID: javafx-archtype-simple, Version 0.0.5 gemacht.
Hier die pom.xml

XML:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.bigmemo</groupId>
    <artifactId>nogoindebt</artifactId>
    <version>3.0.3-SNAPSHOT</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>13</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
    <plugin>
        <artifactId>maven-jlink-plugin</artifactId>
        <version>3.0.0</version>
        <extensions>true</extensions>
        <configuration>
            <!-- configuration elements goes here -->
        </configuration>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        <configuration>
            <release>11</release>
        </configuration>
    </plugin>
    <plugin>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-maven-plugin</artifactId>
        <version>0.0.4</version>
        <configuration>
            <mainClass>com.bigmemo.nogoindebt.App</mainClass>
        </configuration>
    </plugin>
</plugins>
    </build>
</project>

Wie man sieht ist hier das jlink Plugin integriert. Und soweit ich verstanden habe, ist jlink für das packaging der ausführbaren .jar Dateien zuständig. Ok.

In meinem Eclipse habe ich unter Run As -> 4 Maven Build... gewählt. Da erscheint ein neues Fenster wo man die Maven goals eingeben kann.


editconfigandlaunch.JPG

Hier zu sehen, ich habe javafx:jlink eingebeben und gestartet. Diese Projekt ist modularisiert da, es die module-info.java enthält im gegensatz zu meinem Programm. Mein Programm ist leider nicht modularisiert und ich hoffe, es gibt eine Möglichkeit dies nachzuholen.

Ok. Wenn ich es schaffe dieses Dummy-Projekt als jar zu laufen zu bringen, setze ich mich dann an meinem Projekt.

Warum klappt das starten noch nicht? Es müsste mir eine javafx-Fenster mit einem Label für die java-Version und einem anderen Label für die javafx-Version ausgeben. Tut leider noch nicht.
 
K

kneitzel

Gast
Was genau probierst Du denn da zu starten? Du hast danach keine jar Datei. Und wenn Du von maven eine jar Datei bauen lässt, dann ist die sogar ohne manifest, denn Du hast in der pom.xml diesbezüglich nichts konfiguriert.

Dann hast Du da ein maven-jlink-plugin in deiner pom.xml - das hast Du noch nicht einmal konfiguriert - würde ich rausschmeißen, denn das brauchst Du schlicht nicht.

Damit solltest Du dann bei javafx:jlink eigentlich schon in target einen Ordner bekommen, der das Image bereit hält. Also kein jar File sondern ein Ordner mit JRE und allem drum und dran und einem Startscript im bin Verzeichnis.... (Du kannst im javafx-maven-plugin noch jlinkImageName für den Verzeichnisnamen des images und launcher für den Namen des Start Scriptes setzen.)

Generell ist mein Ratschlag, wenn man mit Maven nicht vertraut ist und sich die Konfiguration nicht im Detail erarbeiten will: Nimm Dir einfach ein funktionierendes pom.xml und passe es an. Da musst Du nicht nach Archetypes suchen und so. Einfach pom.xml erstellen, Inhalt rein, an einer kleinen Anzahl Elemente anpassen und schon läuft es.

Und wenn Dein Projekt eine module-info.java enthält, dann hast Du es doch bereits modularisiert. Also prüfen, dass da vernünftiges drin steht. Also auch einfach vom Link:
Java:
module HelloWorld.main {
    requires javafx.controls;
    requires javafx.fxml;
    exports helloworld;
}

HelloWorld.main ist ein Name, denn Du beliebig vorgeben kannst. Das muss dann bei der Angabe der main Klasse mit davor mit / getrennt. (Einfach meine Beispiel pom.xml anschauen!)
Der exports Eintrag gibt den Namespace an, den Du exportieren willst, sprich: Auf den Du zugreifen können willst...

Aber ganz wichtig:
Du baust kein jar File, das Du einfach so weiter geben kannst!

Du baust ein Image und das kannst Du weiter geben.

Wenn Du unbedingt ein jar File haben willst, dann vergiss diese Plugins. Nimm Dir ein Java mit integriertem JavaFX. Und dann baust du ein 08/15 jar File mit Maven (natürlich musst Du es in der pom.xml konfigurieren, so dass die Jar Datei ein korrektes manifest bekommt!)
Und dann kannst Du das jar File auch mit doppelklick starten - So es bei Doppelklick mit einem java mit includiertem JavaFX gestartet wird.
Das ist aber eine schrott Einschränkung. Daher bau ein Image, gib das Image weiter und siehe da: Es läuft auf den Rechnern egal ob und welches Java da installiert ist....
 

BigMemo007

Aktives Mitglied
Also, was echt cool wäre, wenn ihr für Dumme eine Schritt-für-Schritt Anleitung geben würdet, mit dem Ziel, JavaFX-Projekte so zu packagen, dass sie mit einem Doppelklick für den Anwender zu verwenden ist. Also, Deploy-Status erreichen. Also wie @kneitzel sagt, ein Image erstellen :)

Mein System:
<os>Windows 10</os>
<IDE>Eclipse<IDE></IDE>
<IDE-Version>Version: 2020-06 (4.16.0)</IDE-Version>
<IDE-build>Build id: 20200615-1200</IDE-build>
<JDK>openJDK</JDK>
<JDK-version>14</JDK-version>
<javaFX>openSDK</javaFX>
<javaFX-version>14</javaFX-version>
<person>kein Maven Profi</person>
<person>will aber eins werden</person>
<person>gibt nie auf</person>
<person>:p</person>


Ich zähl mal grad auf, was ich bis jetzt verstanden habe:

1. Maven ist ein Tool (unter vielen anderen) das genau mein Ziel erfüllt. Es wrappt das Java-Projekt (kann auch viele andere Projekte wie Web, pyton, usw wrappen) und stellt dependencys zu anderen (fertigen/verwendbaren) Projekten her, wie z.b. javaFX hier in meinem Fall. Maven nutzt auch plugins um bestimmte Aufgaben wie das Packaging ausführen zu können.

2. Meine Ecplipse Version hat Maven automatisch mit installiert. Obwohl ich Maven manuell nie installiert habe (dannn natürlich auch die Windows-Umgebungsvariable nicht eingrichtet habe), funktioniert Maven.

3. Maven nutzt für das Packaging das Plugin jlink. Jlink braucht ein java-modularisiertes Projekt, das eben "module-info.java" beinhaltet. Mein Projekt habe ich z.B. ohne Modularisierung gemacht.

4. Es sind trotz Aufruf von javafx:jlink weitere Schritte nötig, weil die aufeinander aufbauen.


Meine Fragen:

1. Wie kann ich meine fertige App im nachhinein modularisieren?

2. Wie kann ich meine App im nachhinein in ein Maven-Projekt umwandeln?

3. Welche Schritte muss genau einhalten, damit mein Projekt deployed werden kann?


Eine Schritt-für-Schritt Anleitung für Dumme würde mich sehr freuen! Bruchstücke verwirren mich irgendwie nur weiter :) Oder ich lade meine App als zip hoch, einer nimmt sie und sieht, was alles gebraucht wird, erstellt ein Image und sagt mir wie er es geamcht hat....
 

BigMemo007

Aktives Mitglied
Und ich habe das hier probiert:

Code:
C:\Users\Memo\eclipse-workspace\nogoindebt\target> jpackage --type app-image -n meintest -m com.bigmemo.nogoindebt/App.java --runtime-image C:\Users\Memo\eclipse-workspace\nogoindebt\target
WARNING: Using incubator modules: jdk.incubator.jpackage
java.nio.file.FileSystemException: C:\Users\Memo\eclipse-workspace\nogoindebt\target\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\image\bin\server\jvm.dll -> C:\Users\Memo\eclipse-workspace\nogoindebt\target\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\meintest\runtime\image\bin\server\jvm.dll: Es steht nicht genug Speicherplatz auf dem Datenträger zur Verfügung
PS C:\Users\Memo\eclipse-workspace\nogoindebt\target>

Das heist das von @kneitzel erwähnte Manifest ist bei mir wohl ein großes Problem. Das Image weiß nicht, von wo aus das Programm gestartet werden soll.

Wie würde ich es einfügen in die pom.xml?
 
K

kneitzel

Gast
Ich habe ein Gespräch mit Dir gestartet - vielleicht ist das ja ein Vorschlag, der Dich weiter bringen könnte. (Idee eines ersten IT Erklärbär Videos ... So lange wie ich keine Morddrohungen bekomme, belästige ich die YT Gemeinde weiter :) )
 
K

kneitzel

Gast
Also gut, das erste Video des IT Erklärbären ist damit erstellt ... und hochgeladen ....

Wichtig ist: Ist die Qualität ausreichend? Die Idee hier ist, dass es eben nichtmehrfach aufgenommen und groß geschnitten wird. Geht das so?
Oder ist das jetzt zu sehr Zumutung? Wobei ich ja fast meine, dass es eh für Masochisten ist, was ich da mache ... aber auch der Markt muss ja bedient werden :)

 
Ähnliche Java Themen
  Titel Forum Antworten Datum
MiMa Fonts, Icons, Bilder in JavaFX Anwendung AWT, Swing, JavaFX & SWT 5
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
J Netbeans die JavaFX-Anwendung wird nicht ausgeführt AWT, Swing, JavaFX & SWT 16
tommybalbor JavaFx Anwendung klappt nicht für macOs Nutzern, wenn ich zwei dependecies bei maven hinzufüge AWT, Swing, JavaFX & SWT 6
thor_norsk JavaFX Anwendung stürzt ab AWT, Swing, JavaFX & SWT 4
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
G JavaFX Steuerung bzw. Test von externer JavaFX Anwendung (liegt nur als jar vor) AWT, Swing, JavaFX & SWT 9
G JavaFX JavaFX-Dialog aus einer Nicht-JavaFX-Anwendung heraus AWT, Swing, JavaFX & SWT 1
A JavaFX Anwendung in Jar Datei AWT, Swing, JavaFX & SWT 8
L JavaFX LoadException beim Laden von JavaFX Anwendung AWT, Swing, JavaFX & SWT 6
L JavaFX PdfViewer für JavaFX Anwendung AWT, Swing, JavaFX & SWT 6
B Wie erstelle ich eine JavaFX Anwendung von diesem Code? AWT, Swing, JavaFX & SWT 3
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
J JavaFX Anwendung läuft in eclipse, nicht aber exportiert AWT, Swing, JavaFX & SWT 2
Juelin starten maven javafx programm ohne netbeans AWT, Swing, JavaFX & SWT 38
Juelin javax.swing in javafx AWT, Swing, JavaFX & SWT 1
MiMa JUnit5 im JavaFX Projekt AWT, Swing, JavaFX & SWT 2
Juelin in javafx Event auslösen AWT, Swing, JavaFX & SWT 4
MiMa SwingFXUtils in JavaFX 20 AWT, Swing, JavaFX & SWT 6
MiMa JavaFX Fenstertitel zu klein. AWT, Swing, JavaFX & SWT 1
MiMa JavaFX JAR unter Windows ausführen schlägt fehl? AWT, Swing, JavaFX & SWT 5
Hatsi09 Javafx MediaPlayer spielt nicht immer AWT, Swing, JavaFX & SWT 3
Hatsi09 Javafx Neuladen von ImageView und MediaView AWT, Swing, JavaFX & SWT 3
Maxim6394 JavaFX Umlaute in JavaFX GUI AWT, Swing, JavaFX & SWT 12
Maxim6394 JavaFX Scene Builder - Crash bei eigener Komponente AWT, Swing, JavaFX & SWT 2
Ernesto95 JavaFX JavaFX GUI mit sehr vielen Update requests AWT, Swing, JavaFX & SWT 4
Telisti Javafx Image wird nicht richtig integiert AWT, Swing, JavaFX & SWT 8
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
JavaSchmecktLecker JavaFX JavaFX Ordner automatisch verlinken AWT, Swing, JavaFX & SWT 2
melaniemueller Taschenrechner JavaFX AWT, Swing, JavaFX & SWT 4
R auto. Importanweisungen für javafx funktioniert in Eclipse nicht mehr AWT, Swing, JavaFX & SWT 4
berserkerdq2 Skalieren sich javafx objekte automatisch auf die Bildschirmgröße AWT, Swing, JavaFX & SWT 6
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
B Java Projekt mit JavaFX und jfoenix ausführbar machen AWT, Swing, JavaFX & SWT 46
H JavaFX wie JavaFX Projekt aufsetzen? AWT, Swing, JavaFX & SWT 10
thor_norsk JavaFX - Grafikkarte AWT, Swing, JavaFX & SWT 7
MiHimbert Rückmeldung an den aufrufenden JAVAFX-Dialog AWT, Swing, JavaFX & SWT 1
MiMa JavaFX Runtime components are Missing??? AWT, Swing, JavaFX & SWT 3
J JavaFx PDF in einem Element in einem Fenster anzeigen. AWT, Swing, JavaFX & SWT 11
B JavaFX Sprachumschaltung mit Button auf der HMI AWT, Swing, JavaFX & SWT 6
H JavaFX Fehlende JavaFX Package AWT, Swing, JavaFX & SWT 10
K JavaFX unterschiedliche (mehrere Fenster) in seperater Main Methode AWT, Swing, JavaFX & SWT 26
_user_q Kann man ein 2. JavaFX-Fenster auch beenden (exit) statt schließen (close) lassen? AWT, Swing, JavaFX & SWT 8
G JavaFX Line Chart mit Farbverlauf/Gradient in Linie AWT, Swing, JavaFX & SWT 1
thor_norsk JavaFX, FXML und SceneBuilder AWT, Swing, JavaFX & SWT 6
_user_q Über installDist exportiertes Programm wirft "Unsupported JavaFX configuration" AWT, Swing, JavaFX & SWT 0
CodingBerlin JavaFX Programm läuft nur unter Eclipse AWT, Swing, JavaFX & SWT 1
temi JavaFX "Frames" in JavaFx - passende Komponente? AWT, Swing, JavaFX & SWT 13
_user_q [JavaFX] Spinner so einstellen, dass er nicht leer bleiben darf? AWT, Swing, JavaFX & SWT 6
S Javafx getResource-Pfad wird nicht erkannt AWT, Swing, JavaFX & SWT 7
A JavaFX exportierte Jar ohne beim starten die Libs hinzufügen? AWT, Swing, JavaFX & SWT 2
J JavaFX Schiffe versenken mit JavaFX und Scene builder AWT, Swing, JavaFX & SWT 3
Encera ArrayList mit eigenen Objekten in JavaFX sortieren und ausgeben AWT, Swing, JavaFX & SWT 50
L JavaFx Textformatierung mittels Datenbank und Funktion anpassen AWT, Swing, JavaFX & SWT 5
sserio Wie funktioniert ein Controller bei JavaFx? AWT, Swing, JavaFX & SWT 1
sserio Kann man bei JavaFx ein Fenster aufkommen lassen? AWT, Swing, JavaFX & SWT 1
Jose05 JavaFx Fxml: GUI aus einer anderen Klasse starten AWT, Swing, JavaFX & SWT 1
Tassos JavaFX/Problem mit der Maussteuerung in Stackpane AWT, Swing, JavaFX & SWT 7
S Ich bringe Code mit JavaFX unter Apache NetBeans IDE 12.6 nicht zum laufen. AWT, Swing, JavaFX & SWT 14
K Bekomme (u.a) javafx.fxml.LoadException trotz "korrektem" Code AWT, Swing, JavaFX & SWT 8
S JavaFX: voneinander abhängige TextFields AWT, Swing, JavaFX & SWT 33
M Gluon will JavaFX in den Browser stecken AWT, Swing, JavaFX & SWT 0
H javafx application does not exist AWT, Swing, JavaFX & SWT 16
A JavaFX Controller Problem AWT, Swing, JavaFX & SWT 1
izoards JavaFX TableView mit Array Inhalt füllen AWT, Swing, JavaFX & SWT 1
M Javafx versuch Bibliothek zu erstellen AWT, Swing, JavaFX & SWT 0
N JavaFX Javafx intelij Projekt zu ausführbaren jar Datei Machen AWT, Swing, JavaFX & SWT 1
K JavaFx, Sound Aufnahme und Thread AWT, Swing, JavaFX & SWT 0
izoards JavaFX TextFlow - Sonderzeichen AWT, Swing, JavaFX & SWT 1
maximstein JavaFX WebView - java.lang.NoSuchMethodError: 'boolean com.sun.prism.ResourceFactory.isDisposed()' AWT, Swing, JavaFX & SWT 4
N JavaFX Unicode zeichnen in javafx Label verwenden AWT, Swing, JavaFX & SWT 2
MiHimbert javaFX openfx (17) datepicker AWT, Swing, JavaFX & SWT 3
A Mit JavaFX einzelne Zeilen in TableView farbig markieren AWT, Swing, JavaFX & SWT 5
melaniemueller JavaFX Taschenrechner mit SceneBuilder AWT, Swing, JavaFX & SWT 12
Jose05 Javafx Label Höhe=Breite AWT, Swing, JavaFX & SWT 1
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
izoards JavaFX editierbare Tabelle AWT, Swing, JavaFX & SWT 4
N javafx Position der Bustaben finden label AWT, Swing, JavaFX & SWT 1
D Verschieden Scenen ansprechen mit dem Scene Builder und JavaFX (Eclipse) AWT, Swing, JavaFX & SWT 16
izoards JavaFX Background Task warten auf Knopfdruck AWT, Swing, JavaFX & SWT 4
M Zufallsgenerator bei JavaFx AWT, Swing, JavaFX & SWT 1
N Label Schriftart Ändern javafx AWT, Swing, JavaFX & SWT 2
L JavaFX JavaFX, MVVM und SceneBuilder AWT, Swing, JavaFX & SWT 4
S JavaFx Album AWT, Swing, JavaFX & SWT 137
I JavaFX - Pane wechseln über 2. Controller AWT, Swing, JavaFX & SWT 5
melaniemueller JavaFX Beispiel kann nicht ausgeführt werden AWT, Swing, JavaFX & SWT 4
T FXML Datei in Java Code einbinden: javafx.fxml.LoadException AWT, Swing, JavaFX & SWT 2
J JavaFX - Included FXML - Entfernen feststellen AWT, Swing, JavaFX & SWT 2
J JavaFX JavaFX/ Taskmenu / UML Klassendiagramm AWT, Swing, JavaFX & SWT 2
Davee JavaFX JavaFX Jar ausführbar jedoch nicht alle Stages AWT, Swing, JavaFX & SWT 3
2 JavaFX die ChoiceBox leitet den String nicht weiter oder es komm zu einem NullPointer AWT, Swing, JavaFX & SWT 8
C MouseEvent JavaFX AWT, Swing, JavaFX & SWT 4
L JavaFX javafx.fxml.LoadException bei einem Taschenrechner AWT, Swing, JavaFX & SWT 5
M4cM4rco0707 JavaFX Custom-Komponente mit Custom-Controller AWT, Swing, JavaFX & SWT 3
M Error occurred during initialization of boot layer java.lang.module.FindException: Module javafx.controls not found AWT, Swing, JavaFX & SWT 14
G javafx build.fxbuild in eclipse und ANT AWT, Swing, JavaFX & SWT 9
M Kollisionensbehandlung mit JavaFX AWT, Swing, JavaFX & SWT 1
N JavaFX - Toolkit not initialized AWT, Swing, JavaFX & SWT 6
G JavaFX , Duplicate erzeugt aber ich weis nicht wo AWT, Swing, JavaFX & SWT 4
K Javafx Plugin (javafx:jlink) mit moditect Plugin nutzen ... AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben