FX-Projekt: fast leere Fensterausgabe ohne Fehlermeldung

L

LaserBlaubeere

Mitglied
Hallo, ich möchte ein Kontaktbuch erstellen in JavaFX mittels eclipse erstellen.
Die Vorgaben sind, dass model (Klasse Contacts) und view (Klasse Show Contacts) zu trennen sind. Allerdings habe ich mittels Testzwecke die Klasse "Show Contacts" vom package view nach application geschoben. So funktioniert erstmal die Ausgabe, welche allerdings nur den Titel ausgibt und das Label "Kontaktbuch" angezeigt, alle anderen Daten werden nicht übernommen (Name, Vorname, Email, Foto), das Fenster bleibt leer. Eine Fehlermeldung erscheint allerdings auch nicht, wodurch ich sehr ratlos bin.
Hier ist der Code der Klasse Show Contacts:
Klasse ShowContacts:
package application;

import java.util.ArrayList;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import model.Contacts;

/*
 * @author
 * @version 1.1
 */

public class ShowContacts extends Application {

    @Override
    public void start (Stage primaryStage) {
        try {
          ScrollPane root1 = new ScrollPane();
          VBox box = new VBox();
          box.setSpacing(20);
            ArrayList<Contacts> contacts = new ArrayList<>();
            
            
            for (Contacts h : contacts ) {
                GridPane contactsPane = showContacts(h);
                box.getChildren().add(contactsPane);
            }
            
            root1.setContent(box);
            primaryStage.setTitle("Kontaktbuch Test");
            primaryStage.show();
            GridPane root2 = new GridPane();
            root2.add(new Label("Kontaktbuch"), 0, 0);
            primaryStage.setScene(new Scene(root2,900,900));
            
            
            Contacts otter = new Contacts("Otter", "Olaf", "otter.jpg");
            otter.hinzufuegenMail("Otter@otterbau.com");
            otter.hinzufuegenMail("harry@otter.com");
            otter.hinzufuegenMail("otter@otter");
            contacts.add(otter);
            
            Contacts quokka = new Contacts ("Quokka", "Querry", "quokka.jpg");
            quokka.hinzufuegenMail("suess@quokka.de");
            quokka.hinzufuegenMail("quo@kka.de");
            quokka.hinzufuegenMail("quokka@test.de");
            contacts.add(quokka);
            
            
            
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
    
    private GridPane showContacts (Contacts h) {
        GridPane root = new GridPane();
        // horizontal gap and vertical gap between columns and lines
        root.setHgap(10);
        root.setVgap(10);
        //limit the width of columns
        //gives a limit to column 0 
   //     root.getColumnConstraints().add(new ColumnConstraints(100));
        //gives a limit to column 1
  //      root.getColumnConstraints().add(new ColumnConstraints(140));
        // an Insets defines the space around a region
        // here space will be added around the grid
        root.setPadding(new Insets(25, 25, 25, 25));
        
 
        
        root.setPadding(new Insets(25, 25, 25, 25));

        Label vorname = new Label("Vorname: "+h.getVorname());
        root.add(vorname, 1, 1);

        Label nachname = new Label("Nachname: "+h.getName());
        root.add(nachname, 1,2);
        
        
        Image image = new Image (getClass().
                getResource("/resources/"+h.getFoto()).toString());
        
       ImageView imageview = new ImageView(image);
        root.add(imageview, 1, 0);
        
        Label emails = new Label("Emailadresse: ");
        root.add(emails,1, 3);

        root.add(showEmail(h), 1, 4, 2, 1);
        
        
        return root;
        
    }
    
    private ScrollPane showEmail (Contacts h) {
        GridPane root = new GridPane();
        root.setHgap(5);
        root.setVgap(5);
        root.setPadding(new Insets(8, 8, 8, 8));
        int row = 0;
        // the rows of root are dynamically allocated
        ArrayList<String> email = h.getEmail();
        for (int i=0; i<h.getEmail().size(); i++) {
            String e = email.get(i);
            root.add(new Label(e), 1, row);
            row++;
        }
        ScrollPane pane = new ScrollPane();
        pane.setContent(root);
        return pane;
        
    }
    
    public static void main(String[] args) {
        launch(args);
    }

}

und hier meine Klasse Contacts:
Contacts:
package model;

import java.util.ArrayList;

/*
 * @author
 * @version 1.1
 */


public class Contacts {
    
    protected String name;
    protected String vorname;
    protected String foto; //Name der Datei die das Foto enthält
    protected ArrayList<String> emailadressen;
    
     public Contacts(String name, String vorname, String foto) {
         this.name = name;
         this.vorname = vorname;
         if (foto != null) {
                this.foto = foto;
            }else {
                this.foto = "nophoto.jpg";
            }
         emailadressen = new ArrayList<>();
        }
    
     /**
         * getter fuer den Namen
         * @return Name des Kontakts
         */
        public String getName() {
            return name;
        }
        
        /**
         * getter fuer den Vornamen
         * @return Vorname des Kontakts
         */
        public String getVorname(){
            return vorname;
        }
        
        
        /**
         * getter fuer den Namen der Datei, die das Foto enthaelt
         * @return Name der Datei, die das Foto des Kontakts enthaelt
         */
        public String getFoto(){
            return foto;
        }
        
        /**
         * getter fuer die liste Email
         * @return die liste von Emailadressen
         */
        public ArrayList<String> getEmail(){
            return emailadressen;
        }
        
        @Override
        public String toString(){
            return vorname +" "+ name +" " +"\n "+emailadressen.toString();
        }
        
        public void hinzufuegenMail(String email) {
            if (email.length() >= 3 && email.contains("@")
                    && email.charAt(0)!='@' && email.charAt(email.length()-1) != '@') {
                emailadressen.add(email);
            }else {
                System.out.println("Ungültige eMail! ");
            }
        }
      
        
     // main method for testing
        public static void main(String[] args) {
            Contacts otter = new Contacts("Otter", "Olaf", "/resources/otter.jpg");
            otter.hinzufuegenMail("otter@otterbau.com");
            System.out.println(otter);
        }
        
        
    public Contacts() {
        // TODO Auto-generated constructor stub
    }

}

Möglicherweise liegt der Fehler darin, dass ich ShowContacts aus dem package view nach application geschoben habe.
Sobald ich allerdings ShowContacts wieder in das package view schiebe ist das Programm nicht mehr ausführbar, folgende Fehlermeldung erscheint:

Exception in Application constructor
Exception in thread "main" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Unable to construct Application instance: class view.ShowContacts
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:890)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.IllegalAccessException: class com.sun.javafx.application.LauncherImpl (in module javafx.graphics) cannot access class view.ShowContacts (in module FXGE1Contacts) because module FXGE1Contacts does not export view to module javafx.graphics
at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:361)
at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:591)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:802)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
... 1 more

Unter den Run Configurations habe ich die VM-Arguments angepasst, dennoch funktioniert es nicht.
Vielleicht kann mir ja jemand helfen!
 
kneitzel

kneitzel

Top Contributor
Also die Fehlermeldung, die Du bekommst, liegt am Modul-System. Du hast eine module-info.java und daher erzeugst Du ein Modul. Für dieses gelten dann bestimmte Rechte und da fehlt etwas. Zum Glück besagt die Fehlermeldung genau, was fehlt:
because module FXGE1Contacts does not export view to module javafx.graphics
Du musst also noch ein
exports view;
hinzu fügen in deiner module-info.
(Oder ein "exports view to javafx.graphics" wenn dir das lieber wäre.)

Wenn du fxml benutzt, dann braucht der FXMLLoader auch Zugriff per "deep reflection", d.h. zusätzlich wäre ggf. zusätzlich zu dem export noch ein opens notwendig.
(In meinen JavaFX Applikationen habe ich einfach für alle meine Namespaces ein exports und ein opens Eintrag in der module-info.java.)
 
kneitzel

kneitzel

Top Contributor
Und wieso die contacts nicht angezeigt werden:
Dein Ablauf ist derzeit:
- Du erzeugst die ArrayList für die Contacts.
- Dann kommt die Schleife, die alle Contacts hinzu fügt. Die ArrayList ist aber leer, daher wird nichts hinzu gefügt.
- Dann fügst Du die Contacts zu der ArrayList hinzu. Aber dadurch wird ja nichts weiter gemacht...

Also ggf. die for Schleife, die alle Contacts anzeigt, hinter das Hinzufügen der Kontakte setzen. Dann wird da erst einmal was angezeigt.

Ansonsten wäre die generelle Idee, das natürlich weiter so zu verändern, dass es evtl. eine ObservableList ist mit den Kontakten und bei Veränderungen wird dann die Oberfläche angepasst. Aber das ist dann ggf. erst ein späterer Schritt.
 
J

Joreyk

Bekanntes Mitglied
Ich hab es gelöst nur ich weis nicht wie man spoiler einfügt ..kann es ja hier rein stellen wenn du es möchtest.. das mit den Bildchen kannst du ja wieder auskommentieren ich hatte keine Bilder

Aber ich sag dir mal wo das Problemchen Lag

1. Du hast primaryStage.show() zu früh gemacht -> komische Ansicht beim öffnen das ist aber nur von der Ansicht her
2. Du hast contacts hinzugefügt wie sie leer war
3. Du musst die Contacts Liste schon befüllen bevor du sie hinzufügst


-> So sollte es doch ausschauen :D

kontaktbuch.PNG


Anmerkung: dein Code hat noch "unschöne Stellen" das könnte an unerfahrenheit Liegen...
was ein guter tipp ist -> schau dir mal an was Eclipse so vorschlägt ob da was schickes dabei ist und javafx find ich so toll weil da viele shcicke sachen dabei sind



Java:
package application;



import java.io.File;
import java.net.MalformedURLException;
import java.util.ArrayList;

import javafx.application.Application;
import javafx.beans.property.SetProperty;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class LauncherController extends Application {

  public static void main(String[] args) {
    launch(args);
  }

  @Override
  public void start(Stage primaryStage) {
      try {
          ScrollPane root1 = new ScrollPane();
          VBox box = new VBox();
          box.setSpacing(20);
            ArrayList<Contacts> contacts = new ArrayList<>();
            Contacts otter = new Contacts("Otter", "Olaf", "otter.jpg");
            otter.hinzufuegenMail("Otter@otterbau.com");
            otter.hinzufuegenMail("harry@otter.com");
            otter.hinzufuegenMail("otter@otter");
            contacts.add(otter);
          
            Contacts quokka = new Contacts ("Quokka", "Querry", "quokka.jpg");
            quokka.hinzufuegenMail("suess@quokka.de");
            quokka.hinzufuegenMail("quo@kka.de");
            quokka.hinzufuegenMail("quokka@test.de");
            contacts.add(quokka);
          
            for (Contacts h : contacts ) {
                GridPane contactsPane = showContacts(h);
                box.getChildren().add(contactsPane);
            }

            primaryStage.setTitle("Kontaktbuch Test");
          
            GridPane root2 = new GridPane();
            root2.getChildren().add(new Label("Kontaktbuch"));
            primaryStage.setScene(new Scene(new ScrollPane(box),900,900));
          
            primaryStage.show();
          
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
  
    private GridPane showContacts (Contacts h) {
        GridPane root = new GridPane();
        // horizontal gap and vertical gap between columns and lines
        root.setHgap(10);
        root.setVgap(10);
        //limit the width of columns
        //gives a limit to column 0
   //     root.getColumnConstraints().add(new ColumnConstraints(100));
        //gives a limit to column 1
  //      root.getColumnConstraints().add(new ColumnConstraints(140));
        // an Insets defines the space around a region
        // here space will be added around the grid
        root.setPadding(new Insets(25, 25, 25, 25));
      

      
        root.setPadding(new Insets(25, 25, 25, 25));

        Label vorname = new Label("Vorname: "+h.getVorname());
        root.add(vorname, 1, 1);

        Label nachname = new Label("Nachname: "+h.getName());
        root.add(nachname, 1,2);
      
      
        /*
         * Image image = new Image (getClass().
         * getResource("/resources/"+h.getFoto()).toString());
         *
         * ImageView imageview = new ImageView(image); root.add(imageview, 1, 0);
         */
      
        Label emails = new Label("Emailadresse: ");
        root.add(emails,1, 3);

        root.add(showEmail(h), 1, 4, 2, 1);
      
      
        return root;
      
    }
  
    private ScrollPane showEmail (Contacts h) {
        GridPane root = new GridPane();
        root.setHgap(5);
        root.setVgap(5);
        root.setPadding(new Insets(8, 8, 8, 8));
        int row = 0;
        // the rows of root are dynamically allocated
        ArrayList<String> email = h.getEmail();
        for (int i=0; i<h.getEmail().size(); i++) {
            String e = email.get(i);
            root.add(new Label(e), 1, row);
            row++;
        }
        ScrollPane pane = new ScrollPane();
        pane.setContent(root);
        return pane;
      
    }


  }
class Contacts {
  
    protected String name;
    protected String vorname;
    protected String foto; //Name der Datei die das Foto enthält
    protected ArrayList<String> emailadressen;
  
     public Contacts(String name, String vorname, String foto) {
         this.name = name;
         this.vorname = vorname;
         if (foto != null) {
                this.foto = foto;
            }else {
                this.foto = "nophoto.jpg";
            }
         emailadressen = new ArrayList<>();
        }
  
     /**
         * getter fuer den Namen
         * @return Name des Kontakts
         */
        public String getName() {
            return name;
        }
      
        /**
         * getter fuer den Vornamen
         * @return Vorname des Kontakts
         */
        public String getVorname(){
            return vorname;
        }
      
      
        /**
         * getter fuer den Namen der Datei, die das Foto enthaelt
         * @return Name der Datei, die das Foto des Kontakts enthaelt
         */
        public String getFoto(){
            return foto;
        }
      
        /**
         * getter fuer die liste Email
         * @return die liste von Emailadressen
         */
        public ArrayList<String> getEmail(){
            return emailadressen;
        }
      
        @Override
        public String toString(){
            return vorname +" "+ name +" " +"\n "+emailadressen.toString();
        }
      
        public void hinzufuegenMail(String email) {
            if (email.length() >= 3 && email.contains("@")
                    && email.charAt(0)!='@' && email.charAt(email.length()-1) != '@') {
                emailadressen.add(email);
            }else {
                System.out.println("Ungültige eMail! ");
            }
        }
    
      
     // main method for testing
        public static void main(String[] args) {
            Contacts otter = new Contacts("Otter", "Olaf", "/resources/otter.jpg");
            otter.hinzufuegenMail("otter@otterbau.com");
            System.out.println(otter);
        }
      
      
    public Contacts() {
        // TODO Auto-generated constructor stub
    }

}

Dann das mit deinem Exports Problem... kannst du mal die struktur und die Model Info zeigen

Caused by: java.lang.IllegalAccessException: class com.sun.javafx.application.LauncherImpl (in module javafx.graphics) cannot access class view.ShowContacts
 
Zuletzt bearbeitet:
J

Joreyk

Bekanntes Mitglied
Ein weiterer Tipp: erstell in deiner Application die Klassen und schieb sie dann links hin und her und lass eclipse alles updaten geht einfacher und ist fehler frei weil eclipse die option hat "referenzen updaten " wenn mans so macht ..dann muss man nur noch exports in der Module Info dazu schreiben
 
L

LaserBlaubeere

Mitglied
Ich hab es gelöst nur ich weis nicht wie man spoiler einfügt ..kann es ja hier rein stellen wenn du es möchtest.. das mit den Bildchen kannst du ja wieder auskommentieren ich hatte keine Bilder

Aber ich sag dir mal wo das Problemchen Lag

1. Du hast primaryStage.show() zu früh gemacht -> komische Ansicht beim öffnen das ist aber nur von der Ansicht her
2. Du hast contacts hinzugefügt wie sie leer war
3. Du musst die Contacts Liste schon befüllen bevor du sie hinzufügst


-> So sollte es doch ausschauen :D

Anhang anzeigen 15301

Anmerkung: dein Code hat noch "unschöne Stellen" das könnte an unerfahrenheit Liegen...
was ein guter tipp ist -> schau dir mal an was Eclipse so vorschlägt ob da was schickes dabei ist und javafx find ich so toll weil da viele shcicke sachen dabei sind



Java:
package application;



import java.io.File;
import java.net.MalformedURLException;
import java.util.ArrayList;

import javafx.application.Application;
import javafx.beans.property.SetProperty;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class LauncherController extends Application {

  public static void main(String[] args) {
    launch(args);
  }

  @Override
  public void start(Stage primaryStage) {
      try {
          ScrollPane root1 = new ScrollPane();
          VBox box = new VBox();
          box.setSpacing(20);
            ArrayList<Contacts> contacts = new ArrayList<>();
            Contacts otter = new Contacts("Otter", "Olaf", "otter.jpg");
            otter.hinzufuegenMail("Otter@otterbau.com");
            otter.hinzufuegenMail("harry@otter.com");
            otter.hinzufuegenMail("otter@otter");
            contacts.add(otter);
         
            Contacts quokka = new Contacts ("Quokka", "Querry", "quokka.jpg");
            quokka.hinzufuegenMail("suess@quokka.de");
            quokka.hinzufuegenMail("quo@kka.de");
            quokka.hinzufuegenMail("quokka@test.de");
            contacts.add(quokka);
         
            for (Contacts h : contacts ) {
                GridPane contactsPane = showContacts(h);
                box.getChildren().add(contactsPane);
            }

            primaryStage.setTitle("Kontaktbuch Test");
         
            GridPane root2 = new GridPane();
            root2.getChildren().add(new Label("Kontaktbuch"));
            primaryStage.setScene(new Scene(new ScrollPane(box),900,900));
         
            primaryStage.show();
         
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
 
    private GridPane showContacts (Contacts h) {
        GridPane root = new GridPane();
        // horizontal gap and vertical gap between columns and lines
        root.setHgap(10);
        root.setVgap(10);
        //limit the width of columns
        //gives a limit to column 0
   //     root.getColumnConstraints().add(new ColumnConstraints(100));
        //gives a limit to column 1
  //      root.getColumnConstraints().add(new ColumnConstraints(140));
        // an Insets defines the space around a region
        // here space will be added around the grid
        root.setPadding(new Insets(25, 25, 25, 25));
     

     
        root.setPadding(new Insets(25, 25, 25, 25));

        Label vorname = new Label("Vorname: "+h.getVorname());
        root.add(vorname, 1, 1);

        Label nachname = new Label("Nachname: "+h.getName());
        root.add(nachname, 1,2);
     
     
        /*
         * Image image = new Image (getClass().
         * getResource("/resources/"+h.getFoto()).toString());
         *
         * ImageView imageview = new ImageView(image); root.add(imageview, 1, 0);
         */
     
        Label emails = new Label("Emailadresse: ");
        root.add(emails,1, 3);

        root.add(showEmail(h), 1, 4, 2, 1);
     
     
        return root;
     
    }
 
    private ScrollPane showEmail (Contacts h) {
        GridPane root = new GridPane();
        root.setHgap(5);
        root.setVgap(5);
        root.setPadding(new Insets(8, 8, 8, 8));
        int row = 0;
        // the rows of root are dynamically allocated
        ArrayList<String> email = h.getEmail();
        for (int i=0; i<h.getEmail().size(); i++) {
            String e = email.get(i);
            root.add(new Label(e), 1, row);
            row++;
        }
        ScrollPane pane = new ScrollPane();
        pane.setContent(root);
        return pane;
     
    }


  }
class Contacts {
 
    protected String name;
    protected String vorname;
    protected String foto; //Name der Datei die das Foto enthält
    protected ArrayList<String> emailadressen;
 
     public Contacts(String name, String vorname, String foto) {
         this.name = name;
         this.vorname = vorname;
         if (foto != null) {
                this.foto = foto;
            }else {
                this.foto = "nophoto.jpg";
            }
         emailadressen = new ArrayList<>();
        }
 
     /**
         * getter fuer den Namen
         * @return Name des Kontakts
         */
        public String getName() {
            return name;
        }
     
        /**
         * getter fuer den Vornamen
         * @return Vorname des Kontakts
         */
        public String getVorname(){
            return vorname;
        }
     
     
        /**
         * getter fuer den Namen der Datei, die das Foto enthaelt
         * @return Name der Datei, die das Foto des Kontakts enthaelt
         */
        public String getFoto(){
            return foto;
        }
     
        /**
         * getter fuer die liste Email
         * @return die liste von Emailadressen
         */
        public ArrayList<String> getEmail(){
            return emailadressen;
        }
     
        @Override
        public String toString(){
            return vorname +" "+ name +" " +"\n "+emailadressen.toString();
        }
     
        public void hinzufuegenMail(String email) {
            if (email.length() >= 3 && email.contains("@")
                    && email.charAt(0)!='@' && email.charAt(email.length()-1) != '@') {
                emailadressen.add(email);
            }else {
                System.out.println("Ungültige eMail! ");
            }
        }
   
     
     // main method for testing
        public static void main(String[] args) {
            Contacts otter = new Contacts("Otter", "Olaf", "/resources/otter.jpg");
            otter.hinzufuegenMail("otter@otterbau.com");
            System.out.println(otter);
        }
     
     
    public Contacts() {
        // TODO Auto-generated constructor stub
    }

}

Dann das mit deinem Exports Problem... kannst du mal die struktur und die Model Info zeigen
Danke dir/euch für die ganzen Antworten! Das Code Problem habe ich gelöst, ich bekomme nun alles angezeigt was ich benötige. Nur das mit dem view package hab ich nicht ganz verstanden.
kneitzel spricht davon: "Du musst also noch ein
exports view;
hinzu fügen in deiner module-info." - ich versteh aber nicht was damit gemeint ist :/

meine module-info sieht so aus:
Java:
module FXGE1Contacts {
    requires javafx.controls;
    requires javafx.graphics;
    
    opens application to javafx.graphics, javafx.fml;
}

Und ja, ich bin eher Anfänger, daher ist mein Code nicht sonderlich gut.
 
J

Joreyk

Bekanntes Mitglied
du hast deinen code der steht einsam und verlassen da
du hast deine javafx library die einsam und verlassen da steht

du willst aber im code deine fx library benutzen

requires -> du holst einen teil von fx library
exports -> du sagst mit wem das verbundne wird

Java:
module myModule{
    requires transitive javafx.graphics;
    requires transitive javafx.fxml;
    requires transitive javafx.controls;
    requires javafx.base;
    requires transitive javafx.media;
    requires javafx.web;

    exports application;
    exports view;
    exports model;
    exports layout;
}
die kann so aussehen
dh

ich nehm an sich fast alles von der fx library

und verbinde sie mit diesen packages

application, view,model layout

wenn man jetzt gui objekte erstellen möchte in diesen packages dann finden die auch das javafx zeug weil die module info das package mit der library verbunden hat

das opens seh ich zum ersten mal aber so wei es scheint macht das einfach nur das ->
es wird nicht alles was in der module info exportiert zu den packages sondern jeweils nur das was du angibst..da aber java sowieso alles weg schmeisst was unnötig ist nach dem kompilieren seh ich da keinen grund das so zu machen


kann sein dass ich da falsch lieg weil ich das noch nie benutzt hab mit open


dein view package kennt nichtl javafx.graphics? du hast diesem package in deiner module info niemals die verbindung gegeben das fehlt


im prinzip brauchst du das exports nur da wo "extends Application" steht bzw deine Main "weil die braucht das um das dann weiter zu geben" also bei meinem könnte man auch nur exports application schreibne und es würde immer noch funktionieren ( da steht launch args drin mit der Main )


dass es bei dir nicht funktioniert könnte sein dass opens das nur an dieses package gibt und sonst an kein weiteres

kann da aber auch falsch liegen
nur deine fehler meldung
because module FXGE1Contacts does not export view to module javafx.graphics
sagt aus dass in diese richtung was falsch gelaufen sein muss -> export fehlt steht ja auch da

deswegen wollte kneitzel auch dass du mal die module info rein schreibst weils ein module bezogener fehler aufgetaucht ist
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z GUI Forms - Mehrere Fenster in einem Projekt AWT, Swing, JavaFX & SWT 18
C JavaFX Projekt nachträglich zu JavaFX Application machen? AWT, Swing, JavaFX & SWT 1
jmar83 SWT "Google Window Builder" tut keine jar's ins Projekt rein bei SWT-Projekt AWT, Swing, JavaFX & SWT 22
VPChief Eclipse: Projekt mit src ordner exportieren. AWT, Swing, JavaFX & SWT 76
Zrebna JavaFX-Projekt mit Bildern funktioniert nicht - um Hilfe wird gebeten AWT, Swing, JavaFX & SWT 14
ZH1896ZH MineSweeper Projekt: Testen nicht möglich AWT, Swing, JavaFX & SWT 6
N Ausführbare Datei aus JavaFX Projekt erstellen AWT, Swing, JavaFX & SWT 22
M Java Projekt nach JavaFX convertieren AWT, Swing, JavaFX & SWT 4
M Java Gui Projekt, Würfelspiel AWT, Swing, JavaFX & SWT 2
Sam96 JavaFX mit Sqlite Projekt mit jar zu groß AWT, Swing, JavaFX & SWT 10
A Wie baue ich das Bus-System in ein Java Projekt ein? AWT, Swing, JavaFX & SWT 5
B Pong Projekt mit LWJGL Klassen exportieren AWT, Swing, JavaFX & SWT 14
C Hilfe beim programmieren mit studiumgebundenes Projekt AWT, Swing, JavaFX & SWT 1
J Frage zu Java Projekt [2D Game] AWT, Swing, JavaFX & SWT 3
Tom299 JavaFX Projekt-Struktur AWT, Swing, JavaFX & SWT 2
S Projekt: Meisterschaft - Abspeichern bereits gemachter Schritte AWT, Swing, JavaFX & SWT 2
M JavaFX MSI oder EXE aus JavaFX Projekt erstellen? AWT, Swing, JavaFX & SWT 2
Birke Swing Neue Swing LayoutManager: TOnion Projekt AWT, Swing, JavaFX & SWT 10
R JavaFX Mein SceneBuilder Projekt AWT, Swing, JavaFX & SWT 3
D Ambitioniertes Projekt - Brauche Stichworte AWT, Swing, JavaFX & SWT 4
M GUI-Projekt realisieren AWT, Swing, JavaFX & SWT 9
J Swing Window-Builder-Projekt richtig übertragen AWT, Swing, JavaFX & SWT 2
J Das erste Projekt und ein Haufen von Fragen. Der SudokuReader. AWT, Swing, JavaFX & SWT 4
D Java Projekt als Jar AWT, Swing, JavaFX & SWT 3
J jme neues projekt öffnen AWT, Swing, JavaFX & SWT 4
J Projekt Olympische Spiele AWT, Swing, JavaFX & SWT 12
F Netbeans Gui in BlueJ Projekt AWT, Swing, JavaFX & SWT 9
X Resourcen in Projekt einbinden AWT, Swing, JavaFX & SWT 7
R jFreeChart in eine NetBeans Projekt integrieren AWT, Swing, JavaFX & SWT 24
D Swing MVC in Projekt umsetzen AWT, Swing, JavaFX & SWT 71
D Swing Projekt Herangehensweise Swing AWT, Swing, JavaFX & SWT 6
N Swing Projekt - jar ausführen AWT, Swing, JavaFX & SWT 11
C Problem mit Swing Application Framework - Projekt beim AWT, Swing, JavaFX & SWT 2
W netbeans projekt in Eclipse importieren -gui teil geht nicht AWT, Swing, JavaFX & SWT 5
C Mein erstes kleines Swing-Projekt - Probleme AWT, Swing, JavaFX & SWT 8
M Einstellung des Projekt-Verzeichnis in NetBeans AWT, Swing, JavaFX & SWT 4
T Projekt - ChatClient - JEditorPane - Smilies, Vektor AWT, Swing, JavaFX & SWT 2
D Events, Listener, GUI . Größeres Projekt AWT, Swing, JavaFX & SWT 4
M java projekt als exe kompilieren. AWT, Swing, JavaFX & SWT 2
K "Fast-Vollbild-Modus"? Elegantere Möglichkeiten? AWT, Swing, JavaFX & SWT 16
G ein ContentProvider für 2 fast gleiche tabellen AWT, Swing, JavaFX & SWT 7
Nicklas2751 Table View zeigt keinen Inhalt nur leere Zeilen AWT, Swing, JavaFX & SWT 2
T wieso leere Oberfläche? AWT, Swing, JavaFX & SWT 5
L LayoutManager GridBagLayout leere Zeilen AWT, Swing, JavaFX & SWT 4
0 JTable leere Zeilen einfügen AWT, Swing, JavaFX & SWT 3
Balbes Swing Leere Felder in einem JTree nicht zulassen AWT, Swing, JavaFX & SWT 3
N GridBagLayout, leere grids (Hintergrund) transparent? AWT, Swing, JavaFX & SWT 3
P Leere Textfelder abfangen AWT, Swing, JavaFX & SWT 4
B leere JList anzeigen AWT, Swing, JavaFX & SWT 3
GilbertGrape JTable - immer leere Zeile AWT, Swing, JavaFX & SWT 6
K leere Zeile zu JTable zufügen AWT, Swing, JavaFX & SWT 2
Y Leere JTable AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Anzeige

Neue Themen


Oben