如何将Intellij中的普通Java项目转换为JavaFx项目

20

我目前正在使用一个普通的Java项目(Gradle项目),想将其转换为JavaFX项目,而不必重新导入现有的源代码到新的JavaFX项目中。是否有办法实现这一点?

5个回答

19

没有需要转换的内容。

我认为在“普通”的Java项目和JavaFX项目之间没有任何思想差异。当然,在Idea 12.x+中,您可以使用向导创建新的JavaFX项目。但是我认为它所做的只是创建一个示例helloworld应用程序-在初始创建之后,项目的工作方式与任何其他Java项目没有区别。这就是应该的方式,JavaFX只是Java。Oracle在其分发中不区分JavaFX和Java,IDE在其项目类型中也不应该区分。

我相信,在这种情况下,即使我错了,我的正确程度也足够高,如果我错了,那其实也无关紧要。

更新

所以我错得足够让事情变得重要 :-)

使用Idea 13.1.4,如果我使用文件| 新建项目| Java创建新项目,则有以下资源设置(文件|设置|编译器):

?*.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使用第三方构建工具

你可能更好地将你的构建基于 Gradle 或 Maven 等第三方工具。Idea 与这些外部构建工具(和其他工具)配合使用效果非常好。使用第三方工具的优点是:

  1. 使用这些工具的项目遵循一种约定,即将资源放置在特定的资源文件夹中,并将该文件夹中的所有内容视为要打包到构建输出中的资源。因此,在此方面存在较少的混淆。
  2. 结果生成的项目更易于移植,并且其他开发人员可以更轻松地使用,他们可能没有使用 Idea。
  3. 这些项目可以通过持续集成构建系统(如 Jenkins)轻松构建。
  4. Gradle 和 Maven 都具有针对 JavaFX 的特定插件,为打包 JavaFX 应用程序提供额外支持。

当然,使用第三方构建工具的缺点是学习它们的复杂性(和许多怪癖),有时它们可能非常棘手。所以我认为这是一个权衡 - 小型、个人探索项目不需要它们,而较大的项目或您打算与他人共享的项目则从使用此类工具中受益。


6
是的,JavaFX几乎就是Java。如果你在使用fxml,这是一种需要一些基础设施来利用的新的xml资源。这与一个纯粹的Java SE应用程序在小但重要的方面有所不同。我遇到的一个问题是IntelliJ没有将fxml文件从src目录复制到target目录,因此它们无法被getClass().getResource("MyFile.fxml")找到。感谢任何帮助。 - Noah Ternullo
1
根据你的评论,更新了答案Noah。 - jewelsea
很遗憾,现在是2017年,这个问题仍然存在... - Fabio
1
@Fabio,我的IntelliJ中的所有Java项目似乎都默认为!?*.java;!?*.form;!?*.class;!?*.groovy;!?*.scala;!?*.flex;!?*.kt;!?*.clj;!?*.aj,即使它只是一个普通的Java项目。 - Keldon Alleyne
谢谢,现在它可以使用Maven构建了,但仍无法使用JavaFX构建。 - Rainb

1

在经过大量的谷歌搜索后,我终于自己找到了答案!

如果您可以在IntelliJ中创建新的Javafx项目,并且它可以完美地工作,但是当您打开一个普通的Java应用程序并且恰好使用了JavaFX时,它就不起作用(因为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的已接受答案,出现了新的错误。这种方法更简单。 - cagney

1
我跟随了以下步骤:
  • 在现有的Intellij项目(A)中创建一个新模块
  • 在其他地方创建一个新的JavaFx项目
  • 将JavaFx项目中的代码,即Controller.java、Main.java和sample.fxml复制到(A)项目中的模块下src目录中,例如A/user-interface/src

enter image description here

  • 你会在 sample.fxml 中发现一个错误,因为它将控制器类引用为 sample.Controller,请将其更改为仅使用 'Controller'。这样做可以使其正常工作(因为我删除了 sample 包文件夹)。

Fixing sample.fxml

  • 在(A)中打开设置菜单文件|项目结构|模块
  • 从设置窗口左侧的列表中选择用户界面模块
  • 切换到依赖项选项卡
  • 使用右侧的绿色+标记将旧的非GUI模块添加为模块依赖项
  • 现在您可以使用非GUI模块中的类,尽情享受吧!

注意:您可以跳过添加模块依赖项并让IntelliJ为您完成,只需在旧模块中键入类名,alt+enter(魔法灯泡)->添加模块依赖项

Module dependency window


1
一种解决方案是使用Scene Builder生成代码,然后将其集成到您现有的IntelliJ项目中。虽然可以将其导入为模块,但也可以将代码简单地移动到所需位置(对包语句进行适当的更正等)。如果您注意到在项目中无法识别javafx导入,请尝试以下解决方案:
首先确保按照此教程的初始步骤设置了通用的JavaFX IntelliJtutorial。注意:下面我提到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.

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


0
请记住,您的源文件夹必须正确设置。看一下屏幕截图就会明白我意思了。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接