【问题标题】:JavaFX - JFoenix alternative for JDK 13JavaFX - JDK 13 的 JFoenix 替代品
【发布时间】:2020-04-28 11:03:09
【问题描述】:

不幸的是,我的 Java 版本 (13) 无法运行 JFoenix。经过短暂的研究,我发现这个问题可能存在一段时间(link)。

我不太了解 Java,我通过大量教程发现对 JFoenix 的介绍非常好。我也喜欢与 Scene Builder 的集成。所以我想问一下你是否知道 JFoenix 的一个很好的替代品,也适合经验不足的 Java 开发人员?

如果没有其他选择,使用 Java 9 会不会有问题?我在这里看到someone 正在使用 JFoenix 和 JDK 13。有解决方法吗?

【问题讨论】:

  • 您可能可以将 JFoenix 与 Java 13 一起使用,但您必须使用一个或多个 --add-opens VM 参数。
  • 非常感谢您的回答目前看起来像这样,但它不起作用:--module-path D:\PATH\javafx-sdk-11.0.2\lib --add-模块 javafx.controls,javafx.fxml,javafx.base,javafx.graphics,javafx.media,javafx.swing,javafx.web --add-opens javafx.base/com.sun.javafx.runtime=ALL-UNNAMED --添加打开 javafx.controls/com.sun.javafx.scene.control.behavior=ALL-UNNAMED ...

标签: java javafx jfoenix


【解决方案1】:

我能够用 java13 运行 JFoenix,你需要做一些弄清楚。昨天又有人问了一个类似的问题:https://stackoverflow.com/a/61473762/2448015

您还可以在 cmets 中看到 2 个人为您提供了正确的解决方案。我所能做的只是给你一个工作的例子。

如果是直接运行,那么只需要添加相关的vm标志如

--module-path=D:\[YOUR DIRECTOY\javafx-sdk-13\lib
--add-modules=javafx.base, javafx.controls, javafx.fxml, javafx.graphics, javafx.media, javafx.swing, javafx.web
--add-opens
javafx.base/com.sun.javafx.runtime=ALL-UNNAMED
--add-opens
javafx.controls/com.sun.javafx.scene.control.behavior=ALL-UNNAMED
--add-opens
javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED
--add-opens
javafx.base/com.sun.javafx.binding=ALL-UNNAMED
--add-opens
javafx.base/com.sun.javafx.event=ALL-UNNAMED
--add-opens
javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED

参考:https://github.com/jfoenixadmin/JFoenix/issues/889#issuecomment-450744122

如果你使用的是maven,可以参考以下:

<option>--add-opens</option>
<option>javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED</option>

javafx-maven-plugin 的 POM 配置中 为此,您需要修复 pom,类似这样

<?xml version="1.0" encoding="UTF-8"?>
<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>
    <groupId>nu.sharabheshwara.A456B123</groupId>
    <artifactId>nu-sharabheshwara-A456B123-MyFx</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>11</version>
        </dependency> 
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>11</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-web</artifactId>
            <version>11</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-media</artifactId>
            <version>11</version>
        </dependency>
        <dependency>
            <groupId>com.jfoenix</groupId>
            <artifactId>jfoenix</artifactId>
            <version>9.0.1</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>0.0.4</version>
                <configuration>
                    <mainClass>application.Main</mainClass>
                    <options>
                        <option>--add-opens</option><option>javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED</option>
                        <option>--add-opens</option><option>javafx.controls/com.sun.javafx.scene.control.behavior=ALL-UNNAMED</option>
                        <option>--add-opens</option><option>javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED</option>
                        <option>--add-opens</option><option>javafx.base/com.sun.javafx.binding=ALL-UNNAMED</option>
                        <option>--add-opens</option><option>javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED</option>
                        <option>--add-opens</option><option>javafx.base/com.sun.javafx.event=ALL-UNNAMED</option>


                        <option>--add-exports</option><option>javafx.controls/com.sun.javafx.scene.control.behavior=ALL-UNNAMED</option>
                        <option>--add-exports</option><option>javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED</option>
                        <option>--add-exports</option><option>javafx.base/com.sun.javafx.binding=ALL-UNNAMED</option>
                        <option>--add-exports</option><option>javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED</option>
                        <option>--add-exports</option><option>javafx.base/com.sun.javafx.event=ALL-UNNAMED</option>
                    </options>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <compilerArgs>
                        <arg>--add-opens</arg><arg>javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED</arg>
                    </compilerArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

要运行,请使用命令 mvn javafx:runmvn clean javafx:run 。这将使用 javafx-maven-client 而不是 apache。

如果这没有帮助,您可以简单地查看这个 github 示例 maven 项目,您可以在其中放置现有的 jfoenix 代码并使其工作

https://github.com/shashaanktulsyan/java-javafx-maven-learning-tips/tree/master/nu-sharabheshwara-jfoenix_maven_javafx11_fix_demo

这肯定会 100% 解决您的问题。

【讨论】:

  • @A456B123 按原样上传您的代码,在 github 或其他地方,并分享它,我可以尝试让它运行。我没有其他办法。
  • 感谢您的帮助。我现在已经将文件上传到 git 了。如果有任何遗漏,请随时告诉我(尚未使用 git...)github.com/A456B123/MyFXTest/tree/master/MyFx/src
  • @A456B123 我能够运行您的代码。我将它重新打包为一个不错的 Maven 项目。 github.com/shashaanktulsyan/java-javafx-maven-learning-tips/… 。有蓝色背景和文本字段之类的东西。
  • 非常感谢您的工作。 :) 我导入了您的代码,但不幸的是我仍然收到错误消息。您能否在文本字段中输入一些内容(这是一个普通的 JavaFX 文本字段 - 抱歉 - 内容无关紧要),然后单击“下一步”?我收到错误消息。
  • 我从这里导出的更多内部 API stackoverflow.com/a/53527897/2448015 而且从这里我们知道,JFoenix 的许多功能在 java 11.02 之后将无法使用 stackoverflow.com/questions/55889654/… 所以我只需安装 Jdk11.02 就可以了!我没有看到任何错误。有了这个,你可以使用 gluon 并用 JFoenix 制作一个移动应用程序。除此之外,如果你想使用更高版本的 java,你需要放弃 JFoenix 或者 JFoenix 家伙真的需要停止使用这些丑陋的黑客。
猜你喜欢
  • 1970-01-01
  • 2020-02-28
  • 1970-01-01
  • 2010-11-20
  • 1970-01-01
  • 2019-10-01
  • 1970-01-01
  • 2017-07-31
  • 2020-02-14
相关资源
最近更新 更多