当前位置: 首页 > 知识库问答 >
问题:

Maven JavaFx项目编译,但从控制台运行给"缺少JavaFX应用程序类"错误msg

孟建木
2023-03-14

我正在将我的Maven JavaFX应用程序从Java8迁移到Java11。Iv'e将my pom.xml中的插件更新为最新(符合Java 11)的插件。编译运行得很好,在“target”文件夹下的正确目录中提供了jar和所有依赖项和模块,但当我尝试运行jar文件时,会出现可怕的“Missing JavaFX application class”错误。无论我如何尝试更改插件配置-我总是收到此错误消息,应用程序将不会运行。

现在,更多的发现:1。主类确实位于类和jar下的正确文件夹中。2.清单文件位于正确的位置,包含main class属性(在Java8下工作正常)。

以下是报告的相关部分

<plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        <configuration>
            <source>11</source>
            <release>11</release>
            <showWarnings>true</showWarnings>
            <showDeprecation>true</showDeprecation>
            <compilerVersion>11</compilerVersion>
        </configuration>
        <dependencies>
            <dependency>
                <groupId>org.ow2.asm</groupId>
                <artifactId>asm</artifactId>
                <version>7.0</version>
            </dependency>
        </dependencies>
</plugin>
<plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
            <archive>
                <manifest>
                   <addClasspath>false</addClasspath>
                   <mainClass>${mainClass}</mainClass>
                </manifest>
                <manifestEntries>
                   <JavaFX-Application-Class>${mainClass}</JavaFX-Application-Class>
                </manifestEntries>
             </archive>
             <outputDirectory>${project.build.directory}/libs</outputDirectory>
        </configuration>
</plugin>
<plugin>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>3.1.0</version>
        <executions>
                <execution>
                        <id>copy-libs</id>
                        <phase>prepare-package</phase>
                        <goals>
                                <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                                <outputDirectory>${project.build.directory}/libs</outputDirectory>
                                <includeScope>runtime</includeScope>
                                <excludeGroupIds>org.openjfx</excludeGroupIds>
                        </configuration>
                </execution>
                <execution>
                        <id>copy-modules</id>
                        <phase>prepare-package</phase>
                        <goals>
                                <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                                <outputDirectory>${project.build.directory}/mods</outputDirectory>
                                <includeScope>runtime</includeScope>
                                <includeGroupIds>org.openjfx</includeGroupIds>
                        </configuration>
                </execution>
        </executions>

我正在运行jar,包括文档中描述的JavaFX模块:

java -verbose --module-path ../mods \
    --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.swing \
     -jar jar-file-name.jar \
     package.class.MainClass

在我的挫折中,Iv'e尝试了无数的配置,包括使用来自javafxjava11示例的配置。什么都不管用。

有什么想法吗?

共有1个答案

穆理
2023-03-14

我在https://github.com/javafxports/openjdk-jfx/issues/236.找到了变通办法

这个解决方法包括创建一个新的常规(非JavaFx)类,它将是Jar的主要类,这个类将启动最初的基于JavaFx的应用程序类。

这是我找到解决方案的链接中的新类:

public class Main {

    public static void main(String[] args) {
        HelloFX.main(args);
    }
}

希望这对别人有帮助。我不认为这个答案是正确的,因为这是一个解决办法,而不是真正的解决方案。

编辑:事实证明,JavaFX留档中描述的解决方案:https://openjfx.io/openjfx-docs/#modular

正如这里所解释的,为了创建一个具有所有必需JavaFX依赖项的可运行jar,您需要使用一个不从应用程序扩展的启动器类。

 类似资料:
  • Maven JavaFx项目编译但从控制台运行时给出“缺少JavaFx应用程序类”错误消息 上面的方法是“创建一个新的主类,并调用扩展应用程序的类的主方法”。 然而,我仍然面临以下问题: 2.java--module-path“c:\program files\java\javafx-sdk-11.0.2\lib”--add-modules=javafx.controls,javafx.fxml,

  • 使用“mvn包”创建jar后,我使用以下命令从jar创建安装程序: 当尝试双击项目可执行文件(.exe由jpackage创建)时,它不会打开。从cmd运行时,我收到以下错误消息: C: \程序文件\项目\u可执行文件\u名称 奇怪的是,如果我双击jar(jpack用来创建程序映像的那个),它会启动我的应用程序。java-jar也是如此。当使用intellij和mvn javafx的“运行”按钮时,

  • 我是的新手,我正在尝试使用在eclipse上构建一个应用程序,我遵循了一个教程,并且做了完全相同的操作,该应用程序非常简单,当我试图编译它时,我得到了一堆我甚至不理解的错误: 你能告诉我我错过了什么吗。

  • 我试图在中运行控制台应用程序,但出现错误。 异常“yii\base\UnknownPropertyException”,在F:\xampp\htdocs\mdc\vendor\yiisoft\yii2\base\Component中显示消息“设置未知属性:yii\console\Response::formatters”。菲律宾比索:209 Common\config\main本地。php Cro

  • 我正在用Java编写一个程序,并且使用JavaFX作为GUI。直到今天,我一直在使用javafx独立编写代码,所有的事情都运行得很顺利。我已经决定开始使用maven,现在项目不编译,也不运行或执行。 这是我的主要课程: 我在其他项目中使用过maven,但从未使用过JavaFX。我该怎么办?

  • 我正在Liferay控制面板服务器管理脚本控制台中测试一个快速groovy脚本。我需要尝试一下,看看是否可以使用Liferay API以编程方式添加新用户。 我是groovy的新手,可能犯了一个新手错误。我不知道为什么会出错,我一直在努力寻找解决办法。 我正在tomcat上使用Liferay 6.2 EE sp7。 我的脚本代码是 我得到的错误是: groovy.lang.缺少方法异常:没有方法的