如何解决使用 Gluon 在 Android 中找不到 JavaFX 控件
我的印象是可以使用 Gluon 编译部分或全部 JavaFX,生成的 APK 可以在 Android 上成功运行。 Gluon 示例中的 The HelloFXML example 演示了这一点,但它只使用了一个按钮和一个标签,效果很好。
所以我尝试了一下,然后决定尝试一些其他控件,但到目前为止,当 APK 在 Android 设备上运行时,Menu 和 Combobox 控件都会导致错误,尽管它们在桌面上运行良好。
(请理解我正在尝试运行 bog-standard JavaFX,我目前没有尝试使用 Charm。)
所以,编译代码和生成APK没有问题,但是当上传时,这个日志从Android设备返回,并且屏幕保持空白:
06-23 07:44:08.009 25791 25817 E GraalGluon: called JavaMainWrapper_run
06-23 07:44:08.009 25791 25816 D GraalCompiled: at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2701)
06-23 07:44:08.009 25791 25816 D GraalCompiled: at javafx.fxml.FXMLLoader.importClass(FXMLLoader.java:2943)
06-23 07:44:08.009 25791 25816 D GraalCompiled: at javafx.fxml.FXMLLoader.processImport(FXMLLoader.java:2787)
06-23 07:44:08.009 25791 25816 D GraalCompiled: at javafx.fxml.FXMLLoader.processProcessingInstruction(FXMLLoader.java:2752)
06-23 07:44:08.009 25791 25816 D GraalCompiled: at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2618)
06-23 07:44:08.009 25791 25816 D GraalCompiled: at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2542)
06-23 07:44:08.009 25791 25816 D GraalCompiled: at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3317)
06-23 07:44:08.009 25791 25816 D GraalCompiled: at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3274)
06-23 07:44:08.009 25791 25816 D GraalCompiled: at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3243)
06-23 07:44:08.009 25791 25816 D GraalCompiled: at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3216)
06-23 07:44:08.009 25791 25816 D GraalCompiled: at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3208)
06-23 07:44:08.009 25791 25816 D GraalCompiled: at hellofx.HelloFXML.start(HelloFXML.java:42)
06-23 07:44:08.009 25791 25816 D GraalCompiled: at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:849)
06-23 07:44:08.009 25791 25816 D GraalCompiled: at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:474)
06-23 07:44:08.009 25791 25816 D GraalCompiled: at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:447)
06-23 07:44:08.009 25791 25816 D GraalCompiled: at java.security.AccessController.doPrivileged(AccessController.java:100)
06-23 07:44:08.009 25791 25816 D GraalCompiled: at com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:446)
06-23 07:44:08.009 25791 25816 D GraalCompiled: at com.sun.glass.ui.monocle.RunnableProcessor.runLoop(RunnableProcessor.java:92)
06-23 07:44:08.009 25791 25816 D GraalCompiled: at com.sun.glass.ui.monocle.RunnableProcessor.run(RunnableProcessor.java:51)
06-23 07:44:08.009 25791 25816 D GraalCompiled: ... 3 more
06-23 07:44:08.009 25791 25816 D GraalCompiled: Caused by: java.lang.ClassNotFoundException: javafx.scene.control.ComboBox
06-23 07:44:08.009 25791 25816 D GraalCompiled: at com.oracle.svm.core.hub.ClassForNameSupport.forName(ClassForNameSupport.java:64)
06-23 07:44:08.009 25791 25816 D GraalCompiled: at java.lang.ClassLoader.loadClass(ClassLoader.java:290)
06-23 07:44:08.009 25791 25816 D GraalCompiled: at javafx.fxml.FXMLLoader.loadTypeForPackage(FXMLLoader.java:3011)
06-23 07:44:08.009 25791 25816 D GraalCompiled: at javafx.fxml.FXMLLoader.loadType(FXMLLoader.java:3000)
06-23 07:44:08.009 25791 25816 D GraalCompiled: at javafx.fxml.FXMLLoader.importClass(FXMLLoader.java:2941)
06-23 07:44:08.009 25791 25816 D GraalCompiled: ... 20 more
JavaFX fxml 文件包含对正确导入的 ComboBox 的引用。 POM 是:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<properties>
<main.class>hellofx.HelloFXML</main.class>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.release>11</maven.compiler.release>
<javafx.version>16</javafx.version>
<charm.version>6.0.6</charm.version>
<glisten.afterburner.version>2.0.5</glisten.afterburner.version>
<attach.version>4.0.11</attach.version>
<connect.version>2.0.1</connect.version>
<javafx.maven.plugin.version>0.0.6</javafx.maven.plugin.version>
<gluonfx.maven.plugin.version>1.0.1</gluonfx.maven.plugin.version>
</properties>
<groupId>com.gluonhq.samples</groupId>
<version>1.0.0-SNAPSHOT</version>
<artifactId>hellofxml</artifactId>
<packaging>jar</packaging>
<name>TestApplication</name>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>${javafx.version}</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>${javafx.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>${javafx.maven.plugin.version}</version>
<configuration>
<mainClass>${main.class}</mainClass>
</configuration>
</plugin>
<plugin>
<groupId>com.gluonhq</groupId>
<artifactId>gluonfx-maven-plugin</artifactId>
<version>${gluonfx.maven.plugin.version}</version>
<configuration>
<target>${gluonfx.target}</target>
<mainClass>${main.class}</mainClass>
<bundlesList>
<list>hellofx.hello</list>
</bundlesList>
<reflectionList>
<list>hellofx.HelloController</list>
</reflectionList>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>ios</id>
<properties>
<gluonfx.target>ios</gluonfx.target>
</properties>
</profile>
<profile>
<id>android</id>
<properties>
<gluonfx.target>android</gluonfx.target>
</properties>
</profile>
</profiles>
</project>
应用程序在桌面上正常运行。
所以,我想我的问题是:我做错了什么,还是我对 Gluon 的期望太高了?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。