在 Java6 中替代 java.nio.file.Paths
Alternative to java.nio.file.Paths in Java6
由于 java.nio.file.Paths class 及其包在 Java6 和 Android 中不存在,我想知道如何为 [=16 使用替代方法=]?我尝试在 JavaFX 中使用 FXMLLoader
加载 fxml
文件。通常我将所有 fxml 文件放在 src 目录中的特定布局包中,这样可以很容易地通过相对路径加载这些文件。但是,因为我为 Android 构建 JavaFX 项目,我需要将 fxml 文件存储到 assets
目录中,以便它自动包含在 apk 文件中(使用 gradle 构建) .
这是我目前的项目结构:
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 上没有,因为路径 class 在 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();
希望你能帮助我。
此致,
迈克尔
你可以做到
new File(filename).toURI().toURL()
我从未使用过 JavaFX 和 Android,所以我没有在您描述的上下文中对此进行测试,但它是 [=12] 的 java.nio
之前的版本=] 你用的成语。
事实上,路径的使用从一开始就在设计技术上是错误的。 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.nio.file.Paths class 及其包在 Java6 和 Android 中不存在,我想知道如何为 [=16 使用替代方法=]?我尝试在 JavaFX 中使用 FXMLLoader
加载 fxml
文件。通常我将所有 fxml 文件放在 src 目录中的特定布局包中,这样可以很容易地通过相对路径加载这些文件。但是,因为我为 Android 构建 JavaFX 项目,我需要将 fxml 文件存储到 assets
目录中,以便它自动包含在 apk 文件中(使用 gradle 构建) .
这是我目前的项目结构:
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 上没有,因为路径 class 在 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();
希望你能帮助我。
此致, 迈克尔
你可以做到
new File(filename).toURI().toURL()
我从未使用过 JavaFX 和 Android,所以我没有在您描述的上下文中对此进行测试,但它是 [=12] 的 java.nio
之前的版本=] 你用的成语。
事实上,路径的使用从一开始就在设计技术上是错误的。 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
) 的路径及其运行时安装。