WidgetStart

Fiedelbambu

Mitglied
Ich mache einen Online kurs bei Udemy und wir sollen diesen Code verwenden. Im Video funktioniert das auch wundervoll. Ich Tippe diesen Code ab und mache dabei etwas verkehrt, ich habe schon andere Programme aus dem Kurs Problemlos hergestellt nur bei diesem hargt es irgendwo. Da ich hier schon mal sehr nette Hilfe bekommen habe. Wollte ich einmal nachfragen ob jemand sieht wo mein Fehler ist, ich habe schon probiert den Code für das hinzufügen zu ändern nur daran scheint es nicht zu liegen.
Ich weiß nicht so genau was damit gemeint das im Constructor ein Fehler ist, in der Ide ist nichts fehlerhaft angezeigt die Exception kommt erst beim Ausführen




package application;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.Stage;

public class Main extends Application {

final String[] Icon = {
"firefox",
"eclipse",
"mail",
"textedit",

};


@Override
public void start(Stage primaryStage) throws Exception {
Group root = new Group();

//Dock erstellen
ImageView imageViewDock = new ImageView(new Image("dock.png"));

root.getChildren().add(imageViewDock);

//Scene
Scene scene = new Scene(root,500,200);
primaryStage.setScene(scene);
primaryStage.show();
}


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


}

}


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

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:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1082)
Caused by: java.lang.RuntimeException: Unable to construct Application instance: class application.Main
at javafx.graphics@19/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:891)
at javafx.graphics@19/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:196)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.IllegalAccessException: class com.sun.javafx.application.LauncherImpl (in module javafx.graphics) cannot access class application.Main (in module WidgetStart) because module WidgetStart does not export application to module javafx.graphics
at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:392)
at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:674)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:489)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at javafx.graphics@19/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:803)
at javafx.graphics@19/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:484)
at javafx.graphics@19/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at javafx.graphics@19/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456)
at javafx.graphics@19/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics@19/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics@19/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184)
... 1 more
 

KonradN

Super-Moderator
Mitarbeiter
Du nutzt ein Java 9 oder größer und hast eine module-info.java in Deinem Projekt.

Option 1:
Wenn Du nicht mit Modulen arbeiten willst (das ist z.B. notwendig, wenn Du mit JLink ein Image erstellen willst), dann könntest Du einfach die module-info.java löschen oder umbenennen. Dann wäre dein Modul ein unbenanntes Modul und das exportiert alle Klassen und requires alles, was auf dem Classpath verfügbar ist. Du kannst dann aber auch keine Oberfläche mit einem fxml File erstellen, da dann die Namespaces auch geöffnet werden müssen!

Option 2: Du fügst in die modules-info.java noch ein, dass Du alle Namespaces exportierst. Also mindestens ein
exports application;
müsste eingefügt werden.
 

Fiedelbambu

Mitglied
Der Kurs ist leider älter, dewegen nutze ich Java9. Ich habe deswegen leider sehr viele Probleme mit diesem Kurs. Wollte den Kurs trotz allem durch ziehen.
Ich Probiere Option2 aus, es hört sich am Logischten an.

Vielen Dank, du hast mir das letzte mal schon so gut weitergeholfen, bist du Dozent oder ist es reine Erfahrung ?
 

Fiedelbambu

Mitglied
Vielen Dank das du selbstlos Hilfst. Ich hoffe ich erreiche auch dieses Level und kann es anderen zurückgeben.

Einen guten Rutsch ins neue Jahr
 

Oben