【问题标题】:How to convert a normal java project in intellij into a JavaFx project如何将intellij中的普通java项目转换为JavaFx项目
【发布时间】:2014-06-18 17:39:25
【问题描述】:

我目前正在使用一个普通的 java 项目(gradle 项目),并希望将其转换为 JavaFx 项目,而无需将现有源重新导入到新的 Javafx 项目中。有什么方法可以实现吗?

【问题讨论】:

    标签: java user-interface intellij-idea javafx-2


    【解决方案1】:

    没有什么可以转换的。

    我认为“普通”Java 项目和 JavaFX 项目之间的 Idea 没有任何区别。

    当然,在 Idea 12.x+ 中有一个向导可以用来创建新的 JavaFX 项目。但我认为它所做的只是创建一个示例 hello world 应用程序 - 在初始创建之后,该项目的工作方式与任何其他 Java 项目没有任何不同。

    这就是它应该的样子,JavaFX 就是 Java。 Oracle 在其发行版中不区分 JavaFX 和 Java,在其项目类型中也不应区分 IDE。

    我相信,在这种情况下,即使我错了,我也足够正确,即使我错了也没关系。

    更新

    所以我错了,这很重要:-)

    使用Idea 13.1.4,如果我使用File | New Project | Java新建项目,有如下资源设置(File | Settings | Compiler):

    ?*.properties;?*.xml;?*.gif;?*.png;?*.jpeg;?*.jpg;?*.html;?*.dtd;?*.tld;?*.ftl
    

    也就是说,项目的资源只是设置为只复制特定的文件类型。因此,您可以通过添加对 fxml 和 css 的资源复制支持来修改它以获取某些 JavaFX 项目所需的其他文件类型;即,附加;?*.fxml;?*.css

    有趣的是,如果你使用File | New Project | JavaFX创建一个新项目,有以下资源设置:

    !?*.java;!?*.form;!?*.class;!?*.groovy;!?*.scala;!?*.flex;!?*.kt;!?*.clj
    

    本质上,它复制了不是源文件的所有内容,一种文件黑名单集,而不是其他项目创建模板使用的文件白名单集。真的很奇怪...无论如何,资源集是用户可配置的,因此您可以根据需要对其进行修改,一旦这样做,您就不应该有任何问题(我相信,但我以前错了;-)

    建议 - 结合 IDE 使用 3rd 方构建工具

    基于 Gradle 或 Maven 等 3rd 方工具构建可能会更好。 Idea 与这些外部构建工具(和其他工具)配合得非常好。使用 3rd 方工具的优点是:

    1. 使用这些工具的项目遵循约定,将资源放置在特定资源文件夹中,并且该文件夹中的所有内容都被视为要打包到构建输出中的资源。所以那里的混乱更少。
    2. 生成的项目更便携,更易于其他可能未使用 Idea 的开发人员使用。
    3. 可以通过 Jenkins 等持续集成构建系统轻松构建项目。
    4. Gradle 和 Maven 都具有 JavaFX 特定插件,可为打包 JavaFX 应用程序提供额外支持。

    当然,使用 3rd 方构建工具的缺点是学习它们的复杂性(和许多怪癖),因为有时它们可​​能是相当的野兽。所以我认为这是一种权衡——小型的个人探索性项目不需要它们,大型项目或打算与他人共享的项目会从使用这些工具中受益。

    【讨论】:

    • 是的,JavaFX 几乎就是 java。如果您使用的是 fxml,这是一个新的 xml 资源,需要一些基础设施才能使用。这在小而重要的方面与普通的老式 Java SE 应用程序不同。我遇到的一个问题是 IntelliJ 没有将 fxml 文件从 src 目录复制到目标目录,因此 getClass().getResource("MyFile.fxml") 没有找到它们。任何见解都值得赞赏。
    • 根据您的评论 Noah 更新了答案。
    • @NoahTernullo 不幸的是,现在在 2017 年,问题仍然是一样的......
    • @Fabio,我在 IntelliJ 中的所有 Java 项目似乎都默认为 !?*.java;!?*.form;!?*.class;!?*.groovy;!?*.scala;!?*.flex;!?*.kt;!?*.clj;!?*.aj,即使它只是一个普通的 Java 项目。
    • 感谢它现在用 maven 构建,但仍然不能用 JavaFX 构建
    【解决方案2】:

    一种解决方案是使用 Scene Builder 生成您的代码,然后将其集成到您现有的 IntelliJ 项目中。虽然应该可以将其作为模块导入,但您也可以简单地将代码移动到需要的位置(对包语句进行适当的更正等)。如果您发现项目中无法识别 javafx 导入,请尝试以下解决方案:

    首先确保您已按照tutorial 中的初始步骤为 JavaFX 设置了 IntelliJ。注意:下面我提到 1.8,但这应该适用于 1.7+。我推荐 1.8+。

    其次确保现有项目设置允许 javaFX 使用

    1. 打开项目结构
    2. 点击项目设置面板下的项目
    3. 确保项目 SDK 为 1.8+。

    第三确保为支持 JavaFX 的 JDK 配置模块

    1. 打开项目结构
    2. 点击项目设置面板下的模块
    3. 确保使用的模块 SDK 支持 javaFX,我再次使用 JDK 1.8,但它应该适用于 1.7。

    另外,请注意,如果您有一个 maven 项目,您可能需要将您的 fxml 放在一个特定的位置,“/main/resources/”。看看this.

    这对我有用,希望对你有所帮助。

    【讨论】:

      【解决方案3】:

      我遵循了这些步骤

      • 在您现有的 intellij 项目中创建一个新模块 (A)
      • 在别处创建一个新的 JavaFx 项目
      • 将JavaFx项目中的代码,即Controller.java,Main.java and sample.fxml复制到你的src目录下(A)项目的模块中,如A/user-interface/src

      • 您会在sample.fxml 中发现一个错误,因为它将控制器类引用为sample.Controller,仅将其更改为“控制器”。它以这种方式工作(因为我删除了 sample 包文件夹

      • 在(A)打开设置菜单File | Project Structure | Modules
      • 从设置窗口左侧的列表中选择user-interface模块
      • 切换到dependencies 选项卡
      • 使用右侧的绿色 + 标记将旧的非 gui 模块添加为模块依赖项
      • 现在您可以使用非 gui 模块中的类了,尽情享受吧!

      注意:你可以跳过添加模块依赖,让intellij为你做,只需在旧模块中输入一个类的名称,alt+enter(灯泡魔法)->add module depenency

      【讨论】:

        【解决方案4】:

        所以经过大量谷歌搜索后,我终于自己找到了!

        如果您可以在 Intellijd 中创建新的 Javafx 项目并且它运行良好,但是当您打开一个恰好使用 javafx 的普通 java 应用程序时不起作用,(因为 java 只是不想解析 javafx 引用)

        对我有用的是: 您必须将 "jre/lib/ext/jfxrt.jar" 文件添加到我的 windows 机器上位于 IDEA 内的模块类路径中,这是 C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.3.3\jre64\lib\ext\jfxrt.jar

        现在它终于建立起来了!

        【讨论】:

        • 这对我有用。澄清 -> 文件 -> 项目结构 -> 模块 -> 依赖项(右侧选项卡) -> + (加号添加新的)然后选择文件。我使用 pom 尝试了接受的答案,并出现了新的错误。这要容易得多。
        【解决方案5】:

        请记住,您的源文件夹必须正确设置。 查看屏幕截图以了解我的意思..

        【讨论】:

          猜你喜欢
          • 2020-06-23
          • 1970-01-01
          • 1970-01-01
          • 2017-12-07
          • 1970-01-01
          • 1970-01-01
          • 2011-11-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多