JavaFX 12 a maven

0

Hej

Z racji tego że jestem początkujący w programowaniu proszę o wyrozumiałość.

Z racji tego że w JDK 12 nie ma już JavyFX projekt należy kompilować jako maven/gradle gdzie znajduje się biblioteka> Maven:org.openjfx:javafx-...:12.0.1

Pisząc modyfikacje w pliku xxx.java i dodając obiekty w ScenBuilder mogę go otworzyć w IntelliJ-u -nie wyskakują żadne błędy.

Problem zaczyna się w momencie kiedy w SceneBuilder podpinam do StackPane'a adres Controllera.
Nie mogę już wtedy uruchomić podglądu i wnioskując z informacji że w tej bibliotece Mavena nie ma takiego odniesienia...może ktoś pomóc ?
Dziwne bo nic jeszcze nie zacząłem przypisywać nadałem tylko id dla obiektów a już wyskakuje błąd...

at javafx.fxml/javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2625)
at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:943)
at javafx.fxml/javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:980)
at javafx.fxml/javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:227)
at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:752)
at javafx.fxml/javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2722)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2552)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2466)
at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:2435)
at org.openjfx/org.openjfx.App.loadFXML(App.java:34)
at org.openjfx/org.openjfx.App.start(App.java:22)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
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(AccessController.java:389)
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
Caused by: java.lang.IllegalAccessException: class javafx.fxml.FXMLLoader$ValueElement (in module javafx.fxml) cannot access class org.openjfx.controllers.AppController (in module org.openjfx) because module org.openjfx does not export org.openjfx.controllers to module javafx.fxml
at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:355)
at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:639)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:490)
at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:166)
at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:404)
at java.base/java.lang.Class.newInstance(Class.java:590)
at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:936)
... 18 more
Exception running application org.openjfx.App

Process finished with exit code 1

mój kod w javie to:

package org.openjfx;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Stage;

import java.io.IOException;

/**
 * JavaFX App
 */
public class App extends Application {

    private static Scene scene;


    @Override
    public void start(Stage stage) throws IOException {
        scene = new Scene(loadFXML("/fxml/AppPane"));
        stage.setScene(scene);
        stage.setTitle("Apple");
        stage.getIcons().add(new Image("file:src/main/resources/icons/icon.png"));
        stage.setMaximized(true);
        stage.show();

    }


    private static Parent loadFXML(String fxml) throws IOException{
        FXMLLoader fxmlLoader = new FXMLLoader(App.class.getResource(fxml + ".fxml"));
        return fxmlLoader.load();
    }

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

@Gitesik: Nie wiem czy wiesz, ale od Javy 9 weszła modularyzacja czyli kolejna warstwa enkapsulacji -> było private, package scope, protected i public a teraz public jest jar private lub public ->
mianowicie może być klasa dostępna we wszystkich plikach wewnątrz jara, ale nie dostępna z zewnątrz czy to na etapie kompilacji czy refleksji. Za pomocą odpowiedniej konfiguracji możesz exportować paczki. W Twoim przypadku jest tak z modułami JavaFX, jeden nie ma dostępu do drugiego stąd ten exception.
Tutaj masz opis co trzeba zrobić:
https://openjfx.io/openjfx-docs/#install-javafx

0

Dzięki za pomoc działa teraz w IntelliJu :)
Wspomogłem się trochę tym filmikiem:
Wiązało się to z usunięciem: > module-info.java
pytanie co do kompilacji do pliku czy ktoś może wrzucić jak wykonać poprawnie kompilacje z JavaFX ?

0

@Gitesik: chodzi o to że chcesz zbudować wykonywalnego jara?

0

Zgadza się ale przy użyciu 12 gdzie biblioteka JavaFX jest odłączona.
Coś tam wczoraj pogrzebałem i ale tak jak przypuszczałem:
W oknie po prawej klikając na package pokazuje się taki komunikat ale ogólnie proces w konsoli kończy się na 0...

[WARNING] javafx-graphics-12-linux.jar, javafx-graphics-12-mac.jar define 42 overlapping classes: 
[WARNING]   - com.sun.prism.es2.ES2Mesh
[WARNING]   - com.sun.prism.es2.ES2PhongShader$DiffuseState
[WARNING]   - com.sun.prism.es2.ES2Mesh$ES2MeshDisposerRecord
[WARNING]   - com.sun.prism.es2.ES2Shader$ES2ShaderDisposerRecord
[WARNING]   - com.sun.prism.es2.ES2TextureResource
[WARNING]   - com.sun.prism.es2.ES2Pipeline$1
[WARNING]   - com.sun.prism.es2.GLPixelFormat
[WARNING]   - com.sun.prism.es2.GLFactory
[WARNING]   - com.sun.prism.es2.GLGPUInfo
[WARNING]   - com.sun.prism.es2.ES2Pipeline
[WARNING]   - 32 more...
[WARNING] javafx-graphics-12-linux.jar, javafx-graphics-12-win.jar, javafx-graphics-12-mac.jar define 2819 overlapping classes: 
[WARNING]   - javafx.scene.shape.ArcTo$1
[WARNING]   - com.sun.glass.ui.CommonDialogs$ExtensionFilter
[WARNING]   - javafx.scene.paint.CycleMethod
[WARNING]   - com.sun.javafx.geom.AreaOp$SubOp
[WARNING]   - javafx.scene.shape.Shape3D$3
[WARNING]   - javafx.scene.Node$NodeTransformation$5
[WARNING]   - com.sun.prism.PixelFormat$DataType
[WARNING]   - javafx.scene.shape.SVGPath
[WARNING]   - javafx.animation.Animation$AnimationReadOnlyProperty
[WARNING]   - javafx.scene.layout.BackgroundFill
[WARNING]   - 2809 more...
[WARNING] javafx-media-12-linux.jar, javafx-media-12-win.jar, javafx-fxml-12-win.jar, javafx-controls-12-win.jar, javafx-media-12-mac.jar, javafx-graphics-12-win.jar, javafx-graphics-12-linux.jar, javafx-base-12-win.jar, javafx-graphics-12-mac.jar define 1 overlapping classes: 
[WARNING]   - module-info
[WARNING] javafx-media-12-linux.jar, javafx-media-12-win.jar, javafx-media-12-mac.jar define 174 overlapping classes: 
[WARNING]   - com.sun.media.jfxmedia.events.AudioSpectrumEvent
[WARNING]   - com.sun.media.jfxmediaimpl.NativeAudioSpectrum
[WARNING]   - com.sun.media.jfxmedia.control.VideoDataBuffer
[WARNING]   - com.sun.media.jfxmediaimpl.MediaDisposer$ResourceDisposerRecord
[WARNING]   - javafx.scene.media.AudioClip$1
[WARNING]   - javafx.scene.media.MediaPlayer$_SpectrumListener
[WARNING]   - com.sun.media.jfxmedia.MediaException
[WARNING]   - javafx.scene.media.MediaPlayer$11
[WARNING]   - javafx.scene.media.MediaPlayer$_BufferListener
[WARNING]   - com.sun.media.jfxmediaimpl.platform.PlatformManager
[WARNING]   - 164 more...
[WARNING] maven-shade-plugin has detected that some class files are
[WARNING] present in two or more JARs. When this happens, only one
[WARNING] single version of the class is copied to the uber jar.
[WARNING] Usually this is not harmful and you can skip these warnings,
[WARNING] otherwise try to manually exclude artifacts based on
[WARNING] mvn dependency:tree -Ddetail=true and the above output.
[WARNING] See http://docs.codehaus.org/display/MAVENUSER/Shade+Plugin

a otwierając potem w IntelliJ-u plik jar który został utworzony w konsoli pokazuje się komunikat

JavaFX runtime components are missing, and are required to run this application

0

Po usunięciu komend odnośnie linuxa i maca nadal nic to nie dało

[WARNING] App-1.0-SNAPSHOT.jar, javafx-graphics-12-win.jar define 2875 overlapping classes: 
[WARNING]   - javafx.scene.shape.ArcTo$1
[WARNING]   - com.sun.glass.ui.CommonDialogs$ExtensionFilter
[WARNING]   - javafx.scene.paint.CycleMethod
[WARNING]   - com.sun.javafx.geom.AreaOp$SubOp
[WARNING]   - javafx.scene.shape.Shape3D$3
[WARNING]   - javafx.scene.Node$NodeTransformation$5
[WARNING]   - com.sun.prism.PixelFormat$DataType
[WARNING]   - javafx.scene.shape.SVGPath
[WARNING]   - javafx.animation.Animation$AnimationReadOnlyProperty
[WARNING]   - javafx.scene.layout.BackgroundFill
[WARNING]   - 2865 more...
[WARNING] App-1.0-SNAPSHOT.jar, javafx-base-12-win.jar define 662 overlapping classes: 
[WARNING]   - com.sun.javafx.property.JavaBeanAccessHelper
[WARNING]   - javafx.beans.property.ReadOnlyMapProperty
[WARNING]   - javafx.beans.binding.Bindings$26
[WARNING]   - com.sun.javafx.binding.StringFormatter
[WARNING]   - com.sun.javafx.event.EventDispatchChainImpl
[WARNING]   - com.sun.javafx.reflect.MethodUtil$Signature
[WARNING]   - javafx.beans.binding.DoubleExpression$1
[WARNING]   - com.sun.javafx.binding.ListExpressionHelper$SingleInvalidation
[WARNING]   - com.sun.javafx.binding.ListExpressionHelper
[WARNING]   - com.sun.javafx.binding.SetExpressionHelper$Generic
[WARNING]   - 652 more...
[WARNING] App-1.0-SNAPSHOT.jar, javafx-media-12-win.jar define 174 overlapping classes: 
[WARNING]   - com.sun.media.jfxmedia.events.AudioSpectrumEvent
[WARNING]   - com.sun.media.jfxmediaimpl.NativeAudioSpectrum
[WARNING]   - com.sun.media.jfxmedia.control.VideoDataBuffer
[WARNING]   - com.sun.media.jfxmediaimpl.MediaDisposer$ResourceDisposerRecord
[WARNING]   - javafx.scene.media.AudioClip$1
[WARNING]   - javafx.scene.media.MediaPlayer$_SpectrumListener
[WARNING]   - com.sun.media.jfxmedia.MediaException
[WARNING]   - javafx.scene.media.MediaPlayer$11
[WARNING]   - javafx.scene.media.MediaPlayer$_BufferListener
[WARNING]   - com.sun.media.jfxmediaimpl.platform.PlatformManager
[WARNING]   - 164 more...
[WARNING] App-1.0-SNAPSHOT.jar, javafx-fxml-12-win.jar define 78 overlapping classes: 
[WARNING]   - com.sun.javafx.fxml.expression.ExpressionValue$KeyPathMonitor
[WARNING]   - javafx.fxml.FXMLLoader$RootElement
[WARNING]   - com.sun.javafx.fxml.expression.Expression$Parser$TokenType
[WARNING]   - javafx.fxml.FXMLLoader$DefineElement
[WARNING]   - javafx.fxml.Initializable
[WARNING]   - javafx.fxml.FXMLLoader$ControllerMethodEventHandler
[WARNING]   - com.sun.javafx.fxml.BeanAdapter
[WARNING]   - javafx.fxml.FXMLLoader$ControllerAccessor$1
[WARNING]   - javafx.fxml.JavaFXBuilderFactory$ObjectBuilderWrapper$ObjectBuilder
[WARNING]   - javafx.fxml.FXML
[WARNING]   - 68 more...
[WARNING] App-1.0-SNAPSHOT.jar, javafx-controls-12-win.jar define 1216 overlapping classes: 
[WARNING]   - com.sun.javafx.scene.control.TableColumnBaseHelper$TableColumnBaseAccessor
[WARNING]   - javafx.scene.control.ComboBoxBase
[WARNING]   - javafx.scene.control.skin.ColorPickerSkin$StyleableProperties$2
[WARNING]   - com.sun.javafx.scene.control.inputmap.InputMap$KeyMappingInterceptor
[WARNING]   - javafx.scene.control.cell.ChoiceBoxTreeTableCell
[WARNING]   - javafx.scene.control.TableCell$3
[WARNING]   - javafx.scene.control.skin.ProgressBarSkin$StyleableProperties$1
[WARNING]   - javafx.scene.control.DialogPane$2
[WARNING]   - javafx.scene.control.skin.ToolBarSkin$4
[WARNING]   - javafx.scene.control.skin.ColorPickerSkin$3
[WARNING]   - 1206 more...
[WARNING] App-1.0-SNAPSHOT.jar, javafx-graphics-12-win.jar, javafx-media-12-win.jar, javafx-fxml-12-win.jar, javafx-controls-12-win.jar, javafx-base-12-win.jar define 1 overlapping classes: 
[WARNING]   - module-info
[WARNING] maven-shade-plugin has detected that some class files are
[WARNING] present in two or more JARs. When this happens, only one
[WARNING] single version of the class is copied to the uber jar.
[WARNING] Usually this is not harmful and you can skip these warnings,
[WARNING] otherwise try to manually exclude artifacts based on
[WARNING] mvn dependency:tree -Ddetail=true and the above output.
[WARNING] See http://docs.codehaus.org/display/MAVENUSER/Shade+Plugin
0

@Gitesik:

  1. Korzystasz z shade pluginu? Lepiej assembley plugin
  2. Stwórz plik module-info cos jak tu: https://github.com/openjfx/samples/blob/master/CommandLine/Modular/Maven/hellofx/src/main/java/module-info.java tylko żeby było zgodnie z Twoimi modułami. Warto zebyś poczytał jak działa JigSaw żeby nie robić tej modularyzacji na pałe totalnie :D

PS. Jak pomogłem to możesz nacisnąc kciuk w góre obok mojego posta ;)

0

Ujmę to w ten sposób, że poziom mojej irytacji bardzo wzrósł i usunąłem wczoraj mój projekt pod kątem tego iż napiszę go jeszcze raz i rozbuduje.
Lecz na potrzeby testu utworzyłem nowy projekt jak w opisie na: https://openjfx.io/openjfx-docs/#IDE-Intellij
I dzisiaj stwierdziłem że projekt miałem dobrze napisane ale problem polega w kompilacji.
Zwykły projekt który jest dostępny po otwarciu również nie jest możliwy do kompilacji:

Wchodząc w pluginy -> javafx:run

Ukazał się komunikat:

Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
Unrecognized option: --module-path

Dodałem więc pom:

<executable>C:\Program Files\Java\jdk-12.0.1\bin\java</executable>

w pluginie java-maven-plugins.

tym sposobem ten prosty program się otwiera ale w momencie kiedy chce utworzyć JAR pokazuje się komunikat:
screenshot-20190624222434.png

Dodatkowo niepokoi wskazanie tej biblioteki z jdk w moim folderze gdyż kiedy będę chciał odpalić aplikacje na innym kompie to wskazana lokalizacja będzie zła

0 użytkowników online, w tym zalogowanych: 0, gości: 0