由于 java.nio.file.Paths 类及其包在 Java6 和 Android 中不存在,我想知道如何为 Paths.get("filename").toUri() 使用替代方法.toURL()
?我尝试在 JavaFX 中使用 FXMLLoader
加载一个 fxml
文件。通常我将所有 fxml 文件放在 src 目录中的特定布局包中,这样可以很容易地通过相对路径加载这些文件。但是,因为我为 Android 构建 JavaFX 项目,我需要将 fxml 文件存储到 assets
目录中,以便它自动包含在 apk 文件中(使用 gradle build)。
到目前为止,这是我的项目结构:
MyProject
-- src\main\java\somepackage\Main.java
-- assets\sample_layout.fxml
但是,当我构建 apk 时,结构如下所示:
Content of MyProject.apk
-- assets\sample_layout.fxml
-- classes.dex // which contains all compiled classes
-- somepackage\Main.java
我需要从 Main.java
访问 assets
目录中的 sample_layout.fxml
。知道我该怎么做吗?
以下是在 Java7 上有效但不适用于 Java6 的内容(并且在 Android 上无效,因为 Paths 类在 Java6 中不可用):
URL myFxmlLayout= Paths.get("assets/sample_layout.fxml").toUri().toURL();
FXMLLoader loader = new FXMLLoader(myFxmlLayout);
AnchorPane page = (AnchorPane) loader.load();
对于 Java6,我尝试了以下方法,但不起作用:
URL myFxmlLayout= new URI("file:///assets/sample_layout.fxml").toURL();
// OR
URL myFxmlLayout= new URI("file:///../../../../assets/sample_layout.fxml").toURL();
希望你能帮助我。
最好的问候, 迈克尔
最佳答案
事实上,路径的使用从一开始就在设计技术上是错误的。 FXML 源最好作为只读资源打包在 jar 中。
MyProject
-- src\main\java\somepackage\Main.java
-- src\main\resources\assets\sample_layout.fxml
URL myFxmlLayout= Main.class.getResource("/assets/sample_layout.fxml");
在您的原始设计中,您可以改用 new File(...)
,但随后必须处理到 assets
的路径(getAbsolutePath
),以及它的运行时安装。
关于java - 替代 Java6 中的 java.nio.file.Paths,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27903117/