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

如何正确地将JavaFX项目转换为Maven?

吉泰宁
2023-03-14

我在Eclipse IDE中编写了JavaFx项目,它工作正常。

一旦我把它转换成Maven项目,我的FMXL文件就停止打开了。但是,如果我创建新的FXML文件并将它们放在相同的文件夹中,一切都会正常工作。

有没有办法在不重新创建所有FXML文件的情况下运行我的Maven项目?

我已经尝试过在代码中更改FXML文件的路径,将FXML移到src/main/resources包,或者简单地将代码从旧的FXML复制到新的FXML,但没有任何效果。

我在SceneBuilder中创建的所有FXML在整个过程中都没有更改该程序的版本。

我正在使用以下方法加载FXML:

private void showMainPage() throws IOException {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class.getResource("view/MainView.fxml"));
mainLayout = loader.load();
Scene scene = new Scene(mainLayout);
primaryStage.setScene(scene);
primaryStage.show();
}

我的pom。xml文件

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>fx</groupId>
  <artifactId>maven</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>fxMaven</name>
  <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-controls</artifactId>
        <version>17</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-fxml -->
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-fxml</artifactId>
    <version>17</version>
</dependency>
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.26</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc -->
<dependency>
    <groupId>org.xerial</groupId>
    <artifactId>sqlite-jdbc</artifactId>
    <version>3.36.0.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
    <groupId>com.mchange</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.5.5</version>
</dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <release>11</release>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-maven-plugin</artifactId>
            <version>0.0.6</version>
            <executions>
                <execution>
                    <!-- Default configuration for running -->
                    <!-- Usage: mvn clean javafx:run -->
                    <id>default-cli</id>
                    <configuration>
                        <mainClass>ru.jfxreselection.App</mainClass>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
    <resources>
      <resource>
          <directory>src/main/java</directory>
              <includes>
                  <include>**/*.fxml</include>
              </includes>
      </resource>
  </resources>   
</build>

我试图运行旧的错误。FXML文件

java应用程序启动方法中出现异常。朗,反思一下。java上的InvocationTargetException。base/jdk。内部的反映NativeMethodAccessorImpl。在java上调用0(本机方法)。base/jdk。内部的反映NativeMethodAccessorImpl。在java上调用(NativeMethodAccessorImpl.java:78)。base/jdk。内部的反映DelegatingMethodAccessorImpl。在java上调用(DelegatingMethodAccessorImpl.java:43)。base/java。朗,反思一下。方法在javafx上调用(Method.java:567)。图形/com。太阳javafx。应用发射装置。在javafx上启动ApplicationWithArgs(LaunchImpl.java:465)。图形/com。太阳javafx。应用发射装置。在java上启动应用程序(LaunchImpl.java:364)。base/jdk。内部的反映NativeMethodAccessorImpl。在java上调用0(本机方法)。base/jdk。内部的反映NativeMethodAccessorImpl。在java上调用(NativeMethodAccessorImpl.java:78)。base/jdk。内部的反映DelegatingMethodAccessorImpl。在java上调用(DelegatingMethodAccessorImpl.java:43)。base/java。朗,反思一下。方法在java上调用(Method.java:567)。基地/太阳。发射器。LaunchHelper$FXHelper。main(launchelper.java:1071)由以下原因引起:java。lang.RuntimeException:javafx应用程序启动方法中的异常。图形/com。太阳javafx。应用发射装置。在javafx上启动Application1(LaunchImpl.java:901)。图形/com。太阳javafx。应用发射装置。lambda$launchApplication$2(LaunchImpl.java:196)位于java。base/java。朗。丝线。运行(Thread.java:831)的原因是:javafx。fxml。LoadException:/C:/Users/Tormo/eclipse workspace/rslFxNewMaven/target/classes/reselection/view/MainView。fxml:48在javafx。fxml/javafx。fxml。FXMLLoader。javafx上的constructLoadException(FXMLLoader.java:2707)。fxml/javafx。fxml。FXMLLoader。javafx上的loadImpl(fxmloader.java:2685)
。fxml/javafx。fxml。FXMLLoader。javafx上的loadImpl(fxmloader.java:2548)
。fxml/javafx。fxml。FXMLLoader。在rslFxNewMaven/reselection处加载(fxmloader.java:2516)。主要的在rslFxNewMaven/reselection上显示主页(Main.java:28)。主要的从javafx开始(Main.java:22)。图形/com。太阳javafx。应用发射装置。lambda$launchApplication1$9(LaunchImpl.java:847)位于javafx。图形/com。太阳javafx。应用PlatformImpl。lambda$runAndWait$12(platformpl.java:484)在javafx上。图形/com。太阳javafx。应用PlatformImpl。lambda$runLater$10(platformpl.java:457)在java。base/java。安全访问控制器。javafx上的doPrivileged(AccessController.java:391)。图形/com。太阳javafx。应用PlatformImpl。lambda$runLater$11(platformpl.java:456)位于javafx。图形/com。太阳玻璃用户界面。InvokeLaterDispatcher$Future。在javafx上运行(invokelateDispatcher.java:96)。图形/com。太阳玻璃用户界面。赢WinApplication_javafx上的runLoop(本机方法)。图形/com。太阳玻璃用户界面。赢WinApplication。lambda$runLoop$3(WinApplication.java:184)。。。还有一个原因是:java。朗,反思一下。无法访问对象异常:无法进行私有无效重新选择。看法主视图控制器。goDacSearch()抛出java。伊奥。IOException可访问:模块rslFxNewMaven不会“打开重新选择.视图”到模块javafx。java上的fxml。base/java。朗,反思一下。可访问对象。在java上选中CanSetAccessible(AccessibleObject.java:357)。base/java。朗,反思一下。可访问对象。在java上选中CanSetAccessible(AccessibleObject.java:297)。base/java。朗,反思一下。方法java上的checkCanSetAccessible(Method.java:199)。base/java。朗,反思一下。方法setAccessible(Method.java:193)
位于javafx。fxml/javafx。fxml。FXMLLoader$ControllerAccessor。在javafx上添加AccessibleMethods(FXMLLoader.java:3611)。fxml/javafx。fxml。FXMLLoader$ControllerAccessor$1。在javafx上运行(fxmloader.java:3543)。fxml/javafx。fxml。FXMLLoader$ControllerAccessor$1。在java上运行(FXMLLoader.java:3536)。base/java。安全访问控制器。javafx上的doPrivileged(AccessController.java:312)。fxml/javafx。fxml。FXMLLoader$ControllerAccessor。在javafx上添加AccessibleMember(FXMLLoader.java:3535)。fxml/javafx。fxml。FXMLLoader$ControllerAccessor。javafx上的getControllerMethods(FXMLLoader.java:3494)。fxml/javafx。fxml。FXMLLoader$元素。javafx上的getControllerMethodHandle(FXMLLoader.java:573)。fxml/javafx。fxml。FXMLLoader$元素。javafx上的ProcessEventHandlerAttribute(FXMLLoader.java:610)。fxml/javafx。fxml。FXMLLoader$ValueElement。javafx上的processEndElement(FXMLLoader.java:781)。fxml/javafx。fxml。FXMLLoader。javafx上的processEndElement(FXMLLoader.java:2924)。fxml/javafx。fxml。FXMLLoader。loadImpl(fxmloader.java:2639)
。。。13更多运行应用程序重新选择的异常。主要的

共有1个答案

姜彬郁
2023-03-14

这与Maven无关,它是由应用程序的Java模块系统配置不正确引起的访问错误。

错误消息告诉您什么是错误的:

module rslFxNewMaven does not "opens reselection.view" to module javafx.fxml

学习-

在模块信息中添加以下行。爪哇:

opens reselection.view to javafx.fxml;
 类似资料:
  • 问题内容: 我目前正在使用普通的Java项目(gradle项目),并希望将其转换为JavaFx项目,而不必将现有源重新导入到新的Javafx项目中。有什么办法可以做到这一点? 问题答案: 没有什么可以转换的。 我认为“正常” Java项目和JavaFX项目之间在Idea中没有任何区别。 当然,在Idea 12.x +中,可以使用向导创建新的JavaFX项目。但是我认为它所做的只是创建一个示例hel

  • 我目前正在使用一个普通的java项目(gradle项目),并希望将其转换为JavaFx项目,而不必将现有的源代码重新导入到一个新的JavaFx项目中。有没有办法做到这一点?

  • 问题内容: 有人可以告诉我如何将我的Java程序代码导入Eclipse吗?因为我有点想导入它。我通常使用Java博士,但是我想开始使用Eclipse,因为我觉得它更专业并且我喜欢它的“感觉”?那么有人可以向我解释如何去做吗? 如果您需要任何东西,请问:D 问题答案: 为了将您的代码导入Eclipse: 确保所有代码都在一个文件夹(例如/ project)下 在Eclipse中,使用File-> N

  • 我试图使用Eclipse的从maven开始。但如果我尝试将现有项目更改为Maven项目(),结果是: null 问题可能出在哪里? 更新(生成的pom.xml):

  • 我有一个Spring Boot maven应用程序,我需要使用jib插件对其进行dockerize,并将注册表发送到azure容器注册表。注册表已设置并就绪,包括用户名、密码等。。。我的pom。xml如下所示: 当我运行命令“mvn compile jib: build”时,我得到以下输出: 基本映像在公共docker中心存储库中。当我运行docker拉...-我可以毫无问题地拉它。 我如何调整这

  • 问题内容: 我正在从事Spring MVC项目。我正在使用Hibernate。我想将AJAX与jQuery结合使用,以从Spring Controller中获取一些JSON。不幸的是,当我在应用程序中实现方法时,出现了一个错误: 我必须使用哪种适配器以及以哪种方式使用?该方法的最后一行发生了错误: 这是我在Spring MVC项目中与Hibernate一起使用的班级: 编辑 我想知道:我的对象是代