JavaFX + GraalVM + Gluon - PullRequest
       30

JavaFX + GraalVM + Gluon

2 голосов
/ 03 февраля 2020

Привет, я пытался сделать нативную сборку моего проекта javafx, но я получаю исключение, когда пытаюсь его запустить. Я подозреваю, что .f xml файлы не найдены в скомпилированном двоичном файле

Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
        at java.lang.Thread.run(Thread.java:834)
        at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:479)
        at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:193)
Caused by: java.lang.AssertionError: java.lang.ClassNotFoundException: javafx.fxml.FXMLLoader
        at com.sun.javafx.util.Utils.forceInit(Utils.java:858)
        at com.sun.javafx.fxml.FXMLLoaderHelper.<clinit>(FXMLLoaderHelper.java:38)
        at com.oracle.svm.core.hub.ClassInitializationInfo.invokeClassInitializer(ClassInitializationInfo.java:350)
        at com.oracle.svm.core.hub.ClassInitializationInfo.initialize(ClassInitializationInfo.java:270)
        at java.lang.Class.ensureInitialized(DynamicHub.java:475)
        at javafx.fxml.FXMLLoader.<clinit>(FXMLLoader.java:2056)
        at com.oracle.svm.core.hub.ClassInitializationInfo.invokeClassInitializer(ClassInitializationInfo.java:350)
        at com.oracle.svm.core.hub.ClassInitializationInfo.initialize(ClassInitializationInfo.java:270)
        at java.lang.Class.ensureInitialized(DynamicHub.java:475)
        at loliSnatcher.WindowManager.searchWindowLoader(WindowManager.java:21)
        at loliSnatcher.Main.start(Main.java:10)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
        at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
        at java.security.AccessController.doPrivileged(AccessController.java:98)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
        at com.oracle.svm.jni.JNIJavaCallWrappers.jniInvoke_VA_LIST:Ljava_lang_Runnable_2_0002erun_00028_00029V(JNIJavaCallWrappers.java:0)
        at com.sun.glass.ui.gtk.GtkApplication._runLoop(GtkApplication.java)
        at com.sun.glass.ui.gtk.GtkApplicat[ion[a1mb;d3a$4rmunILNooFp$O1(Gtk[Ampp]l ic[ti1omn.-ja-v-a-:-2-77-)-
-       ...- 3- -m-or-e-
-C-au-s-e-d- -b-y-:- -j-a-v-a-.-l-an-g-.-C-la-s-s-No-tF-o-u-n-dE-x-c-e-p-ti-o-n:- j-a-va-f-x-.f-x-ml-.-FX-M-L-L-oa-d-er
-       -a-t- -cm[.mor
acle.svm.core.hub.ClassFo[r[a1m;e3S4umppIoNrFtO.[omr]N a[e1(;C3l2amsBsUFIoLrNDa mSeUSCuCpEpSoSr[.mj
ava:60)
        at ja[v[.1l;a3n4gm.ICNlFaOsm.]f o[N1amm-e-(-D-y-n-a-m-i-c-H-u-b-.-j-a-v-a-:-1-1-9-7-)-
--      -a-t- -c--o--m--.--s--u-n-.-j-a-v-a-f-x-.-u-t-i-l-.-U-t-il-s-.-f-o-r-c-e-I-n-i-t--(-U-t[lms
.java:855)

Я не уверен, что я делаю неправильно, так как он работает отлично, если я запускаю программу с mvn javafx:run

Мне интересно, если мой файл pom неправильный или что-то, что я никогда раньше не использовал maven, поэтому просто попытался скопировать то, что было в примерах проектов, найденных здесь:

https://github.com/gluonhq/client-samples https://gluonhq.com/native-desktop-application-using-substrate-graalvm/

Вот мой текущий исходный код, помощь / понимание будут оценены https://files.catbox.moe/xdr8x8.zip

Я думаю, что это может быть файл pom, здесь есть немного со списком рефлексов, который перечисляет кучу вещей javafx, но я не уверен, нужно ли мне добавлять каждую отдельную вещь javafx, которую я здесь использую, или что https://github.com/gluonhq/client-samples/blob/master/Maven/HelloFXML/pom.xml

1 Ответ

0 голосов
/ 03 февраля 2020

Хорошо, я обнаружил проблему, я должен был добавить все классы в список отражений в pom. xml

    <plugin>
                <groupId>com.gluonhq</groupId>
                <artifactId>client-maven-plugin</artifactId>
                <version>${client.plugin.version}</version>
                <configuration>
                    <reflectionList>
                        <list>javafx.application.Application</list>
                        <list>javafx.fxml.FXMLLoader</list>
                        <list>javafx.beans.value.ObservableValue</list>
                        <list>javafx.event.ActionEvent</list>
                        <list>javafx.event.EventHandler</list>
                        <list>javafx.scene.image.Image</list>
                        <list>javafx.fxml.FXML</list>
                        <list>javafx.scene.control.ScrollPane</list>
                        <list>javafx.scene.control.TextField</list>
                        <list>javafx.scene.image.ImageView</list>
                        <list>javafx.scene.input.MouseEvent</list>
                        <list>javafx.scene.layout.FlowPane</list>
                        <list>javafx.scene.layout.StackPane</list>
                        <list>javafx.scene.Parent</list>
                        <list>javafx.scene.Scene</list>
                        <list>javafx.stage.Stage</list>
                        <list>java.util.ArrayList</list>
                        <list>javafx.scene.control.ComboBox</list>
                        <list>javafx.scene.control.ListCell</list>
                        <list>javafx.geometry.Insets</list>
                        <list>javafx.scene.layout.VBox</list>
                        <list>javafx.scene.layout.HBox</list>
                        <list>javafx.scene.control.Button</list>
                        <list>javafx.scene.control.ScrollPane</list>
                        <list>javafx.scene.layout.GridPane</list>
                        <list>javafx.scene.layout.ColumnConstraints</list>
                        <list>javafx.scene.control.Label</list>
                        <list>javafx.scene.control.Tooltip</list>
                        <list>loliSnatcher.Booru</list>
                        <list>loliSnatcher.BooruHandler</list>
                        <list>loliSnatcher.BooruItem</list>
                        <list>loliSnatcher.Controller</list>
                        <list>loliSnatcher.DanbooruHandler</list>
                        <list>loliSnatcher.GelbooruHandler</list>
                        <list>loliSnatcher.ImageWindowController</list>
                        <list>loliSnatcher.ImageWriter</list>
                        <list>loliSnatcher.MoebooruHandler</list>
                        <list>loliSnatcher.SearchController</list>
                        <list>loliSnatcher.SettingsController</list>
                        <list>loliSnatcher.SnatcherController</list>
                        <list>loliSnatcher.WindowManager</list>
                    </reflectionList>
                    <mainClass>${mainClassName}</mainClass>
                </configuration>

            </plugin>
...