java - 为什么 SBT 在 Java 中找不到 JavaFX 包

标签 java javafx sbt

我想尝试在 sbt 中制作一个简单的 JavaFX 应用程序,但似乎 sbt 无法找到任何 javafx 包,给我这样的错误

error: package javafx.application does not exist
error: package javafx.fxml does not exist
error: package javafx.scene does not exist

...等等

而且我发现这很奇怪,因为 javafx 包默认包含在 Java 7+ 中,所以如果有的话,编译器应该可以使用这些包,但似乎没有那样..

有什么帮助吗?

ps: 我没有使用任何javafx 相关的插件,只是纯粹的sbt,我正在尝试编译一个Java 项目,而不是Scala 项目。使用 sbteclipse

将项目设置为与 Eclipse 兼容

最佳答案

如何针对 JavaFX 构建某些东西(在 SBT 或任何其他工具中)在很大程度上取决于您的 JDK 版本:

使用 JDK 8

一切都开箱即用:JavaFX 位于 jre/lib/ext 中,这意味着它位于默认类路径 javajavac 中,并且在编译和运行时它应该自动可用。这就是@JacekLaskowski 在他的回答中的配置。

这仅在您以 Java 8 为目标时有效:JavaFX 8 不适用于 Java 7,因此针对它进行编译会使您的应用程序仅支持 Java8(除非您确保仅使用在JavaFX 2.x,目标 jdk7 字节码,将 JavaFX 2.x 与您的应用打包等)

使用 JDK 7u6+

JavaFX SDK 与 JDK 一起分发,但它不是自动可用的:它在任何类路径中,您必须在 jre/lib 中查找它并自己将其添加到类路径中。这就是某些 IDE 在支持 JavaFX 时自动执行的操作。

SBT 不会自动为您执行此操作。有sbt-javafx有点帮助,但是还是需要配置jar的位置等。

使用 JDK 6 到 JDK 7u5

您必须下载独立版本并将其添加到类路径中。上述 jdk7u6+ 案例的其余部分适用。


最后,请注意,JavaFX 在 Java 8 的生命周期中添加了新功能,因此构建您的应用程序可能需要特定版本的 JDK8(这在 JDK7 中也有一些发生),这也是您需要的原因之一应该将 JavaFX 与您的应用程序打包在一起。

基本上,只要您依赖 JavaFX,就必须将 JDK 和/或 JavaFX 本身作为两个非托管依赖项进行跟踪,而各个开发人员则必须检查版本并进行配置。

关于java - 为什么 SBT 在 Java 中找不到 JavaFX 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25472182/

相关文章:

java - 自定义 DefaultTableCellRenderer 不更改 jTable 上行的背景颜色

java - 使用 "dist"指定 Play 2.0 端口

java - List DataModel 只读取最后一个元素

css - 动态对象的 JavaFX 文本样式

节点的 JavaFX 快照

javafx - startEdit 或 setOnEditCommit 都没有被调用

scala - SBT 项目中的条件设置

scala - 在测试过程中,如何获取 sbt(resourceGenerators)生成的文件?

java - 将 Spring 的 @Scheduled 注释与特定的执行程序一起使用

java - 如何将自定义标记窗口设置为特定标记