Problem beim JavaFX installieren

123Guy

Neues Mitglied
Hi liebe Community,
seit ein paar Monaten bringe ich mir das Programmieren in Java bei. Dazu benutze ich Eclipse.
Da ich mir für meine Programme nun auch eine grafische Overfläche basteln möchte, versuche ich JavaFX zu installieren.

Ich benutze das Java SE 14.0.2 unter Windows 10 x64 und die Eclipse IDE 2020-06 (Eclipse IDE for Java Developers).

Prinzipiell sollte ich ja nun in Eclipse über "Help" -> "Install new Software" das JavaFX Paket einbinden können.
Dazu unter "Work with" -> "2020-06 - http://download.eclipse.org/releases/2020-06" auswählen und nach "e(fx)clipse" suchen...

e(fx)clipse filter SOLL.jpg


Anschließend sollte nun die Datei auswählbar sein, ist sie bei mir aber nicht!
Bei mir kommt folgendes:
e(fx)clipse filter IST.jpg
Prinzipiell vielleicht nicht schlimm wenn es halt anders heißt dachte ich mir...

Wenn ich das installiere habe ich aber offensichtlich nicht das richtige Paket installiert, denn ein JavaFXProjekt kann ich damit nicht öffnen:

kein javaFXProject.jpg


Mein nächter Gedanke war einfach den Link aus dem ersten Bild manuel hinzuzufügen und die e(fx)clipse IDE von Oxygen zu installieren.
Gefunden habe ich diese auch sofort aber schon bei der installation scheint etwas nicht zu passen, was ja vielleicht auch logisch ist wenn ich eigentlich garnicht eclipse oxygen habe:

computing alternate solutions.jpg

naja nichts desto trotz, eclipse wirft das zuvor installierte runter und pakt die javaFX version von oxygen drauf!

Hurra, unter "new Project" ist tatsächlich "JavaFX" auswählbar also erstelle ich ein neues "JavaFX Project".
Das Projekt wird erstellt und ist mit Quelltest gefüllt wie es sein sollte nur meckert der Kompiler von oben bis unten.

fx quelltext.jpg

Habe ich irgendwelche Bibliotheken vergessen? Ist die e(fx)clipse für oxygen nicht mit eclipse 2020-06 kompatibel?
Habe auch versucht eclipse oxygen runterzuladen und es damit zu versuchen, leider das gleich problem...

Im Videotutorial dazu hat es geklappt ohne zusätzliche Bibliotheken einzubinden, nur mit dem Quelltext den sich eclipse selber zusammenbastelt und auf Ausführen sollte im normalfall ein leeres fenster erscheinen!
 

Anhänge

  • kein javaFXProject.jpg
    kein javaFXProject.jpg
    23,3 KB · Aufrufe: 0
Das e(fx)clipse dürfte nur eine Integration von JavaFX (openJFX) in Eclipse sein. Du benötigst aber auch noch das JavaFX selbst und musst dann die Modulpfade bereit stellen.

https://openjfx.io/openjfx-docs/ erläutert die Möglichlkeiten / Optionen sehr gut wie ich meine. Ich selbst würde eigentlich immer dazu raten, den Build über Gradle oder Maven zu machen und sich so einiges an Konfiguration und Installation zu ersparen. Aber das sollte jeder für sich entscheiden.

Für dich wäre der Teil "JavaFX and Eclipse" interessant und wichtig. Es erläutert auch die Installation + Eintragen der Pfade, was ich oben als erstes erwähnt habe.
 
"JavaFX is included with the standard JDK and JRE bundles "
damit dürfte das JavaFX herunterladen und Pfade eintragen doch eigentlich entfallen und der Zugriff müsste direkt über eclipse gewährleistet sein...
und das ist es ja auch nachdem ich die Adresszeile händisch geändert habe und auf der Seit von oxygen runtergeladen habe...

ich kann nur mit den fehlermeldungen noch nichts anfangen, versuche ich troz fehler das programm auszuführen kommt z.B diese fehlermeldung:
Error: Unable to initialize main class application.Main
Caused by: java.lang.NoClassDefFoundError: Stage
 
Ich weiß nicht, wo du diese Aussage gefunden hast, aber das galt nur bis JDK 8. Und das erklärt auch die Probleme: Da JavaFX nicht installiert ist, kann er die Klassen nicht finden. Stage ist eine JavaFX Klasse und die Fehlermeldung besagt schlicht: Klasse nicht gefunden.
 
https://openjfx.io/openjfx-docs/ erläutert die Möglichlkeiten / Optionen sehr gut wie ich meine. Ich selbst würde eigentlich immer dazu raten, den Build über Gradle oder Maven zu machen und sich so einiges an Konfiguration und Installation zu ersparen. Aber das sollte jeder für sich entscheiden.




Dieser Link hat mir sehr geholfen, auch wenn ich lange dafür gebraucht habe das es funktioniert. Danke @JustNobody
 
Noch eine Frage. Wo kann ich den Scene Builder herunterladen? Eine Anleitung habe ich bereits im Internet gefunden, aber der Link führt mich auf die Oracle Seite. Um ihn da herunter zu laden benötige ich jedoch einen Firmen ACC, den ich nicht besitze.
Will aber auch nicht von irgend einer Seite herunterladen.
 
Das Tool wurde Open Source und Gluon bietet ihn in aktuellen Versionen an und entwickelt ihn weiter.

 
Danke für die schnelle Antwort. Das Herunterladen hat Funktioniert und das einbinden auch. Leider kann ich meine Datei aus Eclipse nicht mit den Scene Builder öffnen. Der Fehler der kommt:
scene builder open operation has failed. Make sure that the choose file is a valid FXML document.
Ich habe mich an ein Tutorial von Youtube gehalten, was erklärt wie JavaFx funktioniert.
Habt ihr vielleicht eine Lösung für mein Problem, bzw einen Hinweis wo ich den Fehler gemacht habe?
 
Wie sieht denn die fxml Datei aus? Wie heißt diese und was ist der Inhalt?

Du kannst ansonsten den Scene Builder auch direkt starten und eine neue Datei erstellen und dann schauen, ob das Speichern / laden generell klappt. Eclipse selbst nutze ich nicht, daher kann ich da zur Einbindung nicht viel sagen...
 
Code:
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.AnchorPane?>

<AnchorPane xmlns:fx="http://javafx.com/fxml/1">
    <!-- TODO Add Nodes -->
</AnchorPane>

Das ist das Automatisch generierte von Eclipse. In dem Tutorial öffnet er sie in Eclipse einfach mit Rechtsklick und Open with scene builder.
Dabei öffnet er sich.

Dateien nur mit den Scene Builder speichern und laden funktioniert.
 
Habe jetzt den Fehler mehr oder weniger gefunden. Habe einfach ein neues FXML in Eclipse erstellt und das alte gelöscht. Nun funktioniert es 😀
Danke Für die Hilfe, ohne @JustNobody wäre ich nicht so weit gekommen 🙂
 
Jetzt öffnet sich mein Fenster nicht und es kommt kein Fehler.
Ich poste mal hier den Code, vielleicht kann mir wieder jmd helfen.

Die MAIN

Code:
package application;
    
import java.io.IOException;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;


public class Main extends Application {
    
    private Stage primaryStage;

    @Override
    public void start(Stage primaryStage) {
        this.primaryStage = primaryStage;
        
        
    }
    
    public void mainWindow() {
        
        try {
            FXMLLoader loader = new FXMLLoader(Main.class.getResource("MainWindow.fxml"));
            AnchorPane pane = loader.load();
            
            primaryStage.setMinHeight(400.00);
            primaryStage.setMinWidth(400.00);
            
            MainWindowController mainWindowController = loader.getController();
            mainWindowController.setMain(this);
            
            Scene scene = new Scene(pane);
            
            primaryStage.setScene(scene);
            primaryStage.show();
            
        } catch (IOException e) {
            
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        launch(args);
    }
}

Der MainWindowController

Code:
package application;

import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;

public class MainWindowController {
    
    // Views
    
    private Label label;
    private TextField field;
    

    
    public Main main;
    
    public void setMain(Main main) {
        this.main = main;
        
        
    }
    
    @FXML
    public void handlestartB() {
        
    }
    
    @FXML
    public void handleladenB() {
        
    }
    
    @FXML
    public void handleschliesenB() {
        
        
    }
    
}

Das MainWindow.fxml

Code:
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>


<AnchorPane prefHeight="400.0" prefWidth="500.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/11.0.1" fx:controller="application.MainWindowController">
   <children>
      <VBox alignment="CENTER" layoutY="100.0" spacing="20.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <children>
            <Label fx:id="label" text="Label" />
            <HBox alignment="CENTER">
               <children>
                  <TextField fx:id="field" alignment="CENTER" prefHeight="26.0" prefWidth="335.0" />
               </children>
            </HBox>
            <VBox alignment="TOP_CENTER" spacing="20.0">
               <children>
                  <Button fx:id="startB" mnemonicParsing="false" text="START" />
                  <Button fx:id="ladenB" mnemonicParsing="false" text="LADEN" />
                  <Button fx:id="schliesenB" mnemonicParsing="false" text="SCHLIESEN" />
               </children>
            </VBox>
         </children>
      </VBox>
   </children>
</AnchorPane>
 
Welche Methoden werden denn so aufgerufen im Laufe des Programms und in welcher davon soll das Fenster angezeigt werden? =)
 
Danke für die schnelle Antwort.
Eigentlich verfolge ich momentan nur ein Tutorial auf Youtube, wo erklärt wied wie FX funktioniert. Ist leider schon etwas älter und in diesen war JavaFX und der SceneBuilder bereits vorhanden. Leider musste ich über einige Umwege das alles erst in Eclipse irgendwie einbinden.
Das hat mich schon einige Zeit und nerven gekostet 😅
Jetzt klappt alles soweit nur beim Ausführen (Run) öffnet sich kein Fenster, aber bei den Tutorial klappt das. Habe jetzt mehrfach nochmal alle Schritte nachvollzogen die in dem Video erklärt wurden und ich habe es identisch, dennoch öffnet sich das Fenster nicht.
Ich vermute es könnte daran liegen das ich den Scene Builder und FX nachträglich erst einfügen musste und das Ausführen nur wie in diesem Artikel beschrieben Funktioniert

3. Fügen Sie VM-Argumente hinzu
Um das Problem zu Run -> Run Configurations... -> Java Applicationbeheben , klicken Sie auf , erstellen Sie eine neue Startkonfiguration für Ihr Projekt mit dem Namen "hellofx" und fügen Sie die folgenden VM-Argumente hinzu:


--module-path "\path\to\javafx-sdk-14\lib" --add-modules javafx.controls,javafx.fxml


Ich hoffe ich habe mich verständlich ausgedrückt 😅
 
Schau mal ob das in dem Tutorial nicht so aussieht.
Java:
@Override
public void start(Stage primaryStage) {
    this.primaryStage = primaryStage;
    
    mainWindow();
}
 
Es funktioniert. Ich Blödmann. Tausendmal das Video angeschaut und verglichen und jedes mal übersehen. Manchmal sieht man den Wald vor lauter Bäumen nicht 😣
Danke sehr 😀
 
Ja, das ist leider normal. Gibt das Video nicht auch einen Link zu den Sourcen auf GitHub oder so? Dann ersparst Du Dir das Abtippen und damit auch so Fehler. (Sowas kann immer sehr deprimierend sein und hält einen natürlich lange auf ...)
 
Das gibt es bestimmt, aber (so doof das auch klingt) Ich möchte abtippen um zu lernen und Fehler machen weil auch daraus (vielleicht sogar am besten daraus) lerne ich es 😅
Ich habe schon ein Haufen Fehler gemacht und die meisten habe ich (wenn auch nach langen suchen und viel Zeit investieren) gefunden und werde sie nicht wiederholen. 🙂
 

Zurück
Oben