Frage zu IntelliJ und JavaFX

berserkerdq2

Bekanntes Mitglied
Ich kapiere paar einfache Gegebenheiten leider nicht.

Wenn ich z. B. Swing nutzen will, importiere ich einfach Swing und nutze es.

Wenn ich JavaFx importieren will, so geht das leider nicht und ich muss zuvor beim erstellen des Projekts JavaFx auswählen.

Bis hierhin okay.
Aber was mir nicht dann ganz klar ist, ich kann dann JavaFx Klassen importieren und diese auch nutzen, aber bin ich dann noch in der "normalen" Java Umgebung? ALso kann ich dann auch alles andere nutzen, was ich zuvor in Java nutzen konnte, wie z. B. 2dGraphics, Swing etc.? Wenn ja, wozu überhaupt diese Trennung? Bzw., dass ich beim erstellen des Projekts auswählen muss, dass ich noch JavaFx auswähle?
 
Beste Antwort
JavaFx importieren will, so geht das leider nicht
Doch das geht prinzipiell genau so. Es gibt lediglich eine Besonderheit, dass man in der ersten Klasse, die aufgerufen wird, nicht direkt von Application erben darf. Das führt dann zu einer zusätzlichen Klasse wie:
Java:
/**
 * Another Main class as workaround when the JavaFX Application ist started without
 * taking care os Classloader Requirements of JavaFX. (Important when starting from inside NetBeans!)
 */
public class Main {
    /**
     * Additional main methode to start Application.
     * @param args Commandline Arguments.
     */
    public static void main(String[] args) {
        JavaFXApp.main(args);
    }
}
...
JavaFx importieren will, so geht das leider nicht
Doch das geht prinzipiell genau so. Es gibt lediglich eine Besonderheit, dass man in der ersten Klasse, die aufgerufen wird, nicht direkt von Application erben darf. Das führt dann zu einer zusätzlichen Klasse wie:
Java:
/**
 * Another Main class as workaround when the JavaFX Application ist started without
 * taking care os Classloader Requirements of JavaFX. (Important when starting from inside NetBeans!)
 */
public class Main {
    /**
     * Additional main methode to start Application.
     * @param args Commandline Arguments.
     */
    public static void main(String[] args) {
        JavaFXApp.main(args);
    }
}
(https://github.com/kneitzel/JavaFXMavenApp/blob/main/src/main/java/de/kneitzel/Main.java)

aber bin ich dann noch in der "normalen" Java Umgebung?
Ja natürlich. JavaFX ist auch nur ein Framework / eine Library, die eingebunden wird. Es gibt aber halt auch noch native Komponenten, was es Platform-Spezifisch macht, aber das kann generell auftreten auch bei anderen Libraries, die JNA / JNI oder ähnliches nutzen.

Aber Du musst natürlich auf Wechselwirkungen aufpassen, z.B. wenn Du UIs mischst. Aber das ist nichts ungewöhnliches und da gibt es auch Dokumentation, wie man sowas mischen kann / soll. (Bei GUI Frameworks kommt halt dazu, dass die eigentliche Applikation dann einen Thread hat, der Events abarbeitet. Und da müssen die UI Frameworks ja irgendwie miteinander klar kommen.)

Bezüglich Projekte - da wäre mein Ratschlag, generell Maven oder Gradle zu nutzen. Das ist deutlich transparenter als eine IDE, die irgendwas intern macht (wobei man da auch gut alles durchschauen kann - aber in der IDE ist das halt nicht so übersichtlich wie eine Hand voll Textdateien oder gar nur eine Textdatei.)
 
Beste Antwort

Zurück
Oben