Java6中java.nio.file.path的替代方案
由于java.nio.file.Paths类及其包在Java6和Android中不存在,我想知道如何为Java6中java.nio.file.path的替代方案,java,android,javafx,classloader,Java,Android,Javafx,Classloader,由于java.nio.file.Paths类及其包在Java6和Android中不存在,我想知道如何为path.get(“filename”).toUri().tour()使用另一种方法?我尝试使用JavaFX中的FXMLLoader加载fxml文件。通常,我将所有fxml文件放在src目录中的特定布局包中,这使得通过相对路径加载这些文件变得很容易。但是,因为我为Android构建了JavaFX项目,所以我需要将fxml文件存储到assets目录中,这样它就会自动包含在apk文件中(使用grad
path.get(“filename”).toUri().tour()使用另一种方法?我尝试使用JavaFX中的FXMLLoader
加载fxml
文件。通常,我将所有fxml文件放在src目录中的特定布局包中,这使得通过相对路径加载这些文件变得很容易。但是,因为我为Android构建了JavaFX项目,所以我需要将fxml文件存储到assets
目录中,这样它就会自动包含在apk文件中(使用gradle构建)
这是我目前的项目结构:
MyProject
-- src\main\java\somepackage\Main.java
-- assets\sample_layout.fxml
Content of MyProject.apk
-- assets\sample_layout.fxml
-- classes.dex // which contains all compiled classes
-- somepackage\Main.java
URL myFxmlLayout= new URI("file:///assets/sample_layout.fxml").toURL();
// OR
URL myFxmlLayout= new URI("file:///../../../../assets/sample_layout.fxml").toURL();
但是,当我构建apk时,结构如下所示:
MyProject
-- src\main\java\somepackage\Main.java
-- assets\sample_layout.fxml
Content of MyProject.apk
-- assets\sample_layout.fxml
-- classes.dex // which contains all compiled classes
-- somepackage\Main.java
URL myFxmlLayout= new URI("file:///assets/sample_layout.fxml").toURL();
// OR
URL myFxmlLayout= new URI("file:///../../../../assets/sample_layout.fxml").toURL();
我需要从Main.java
访问assets
目录中的sample\u layout.fxml
。你知道我怎么做吗
以下是在Java7上工作的内容,但不适用于Java6(在Android上也不适用,因为Paths类在Java6中不可用):
对于Java6,我尝试了以下方法,但不起作用:
MyProject
-- src\main\java\somepackage\Main.java
-- assets\sample_layout.fxml
Content of MyProject.apk
-- assets\sample_layout.fxml
-- classes.dex // which contains all compiled classes
-- somepackage\Main.java
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,所以我没有在您描述的上下文中测试过,但它是java.nio
之前版本的path.get(…)
习惯用法。您可以这样做
new File(filename).toURI().toURL()
我从来没有使用过JavaFX和Android,所以我没有在您描述的上下文中测试过这一点,但它是java.nio
之前版本的path.get(…)
习惯用法。事实上,路径的使用从一开始就在技术上是错误的。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");
在最初的设计中,您可以使用新文件(…)
,但随后必须注意资产的路径(getAbsolutePath
),以及它的运行时安装。事实上,路径的使用从一开始就是技术上错误的设计。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");
在您最初的设计中,您可以使用新文件(…)
,但必须注意资产的路径(getAbsolutePath
),以及它的运行时安装。嘿,James,这可以作为JavaFX项目在本地运行该项目(注意:新文件(filename).tour()
将是正确的方法,但不推荐使用,因此它的工作方式与Java7中的path.get(…)相同。但是,它可以无错误地构建,但到目前为止它没有在Android上运行,因为它没有排除我尝试过的相对路径:-/我认为。/../assets/sample\u layout.fxml
应该是正确的路径,但它不起作用。有什么想法吗?根据我问题中列出的apk结构,对文件路径有什么建议吗?提前感谢。嘿,James,这可以作为JavaFX项目在本地运行该项目(注意:新文件(filename).tour()将是正确的方式,但不推荐使用,因此它与Java7中的path.get(…)的工作方式相同)。但是,它可以无错误地构建,但到目前为止它没有在Android上运行,因为它没有排除我尝试过的相对路径:-/我认为。/../assets/sample\u layout.fxml
应该是正确的路径,但它不起作用。有什么想法吗?根据我问题中列出的apk结构,对文件路径有什么建议吗?提前谢谢,太好了!在我的Android设备上就像一个符咒一样工作:)但是,它在我的桌面上不工作,因为它无法从该目录中找到fxml文件。你知道如何让它同时在Android和桌面上运行吗?我考虑提供两个路径,一个用于Android设备,另一个用于桌面版本,然后检查可以找到哪个文件。简单的方法是在eclipse中使用src/main/resources
作为源文件夹
。然后,您可以使用src\main\resources\assets\sample\u layout.fxml中的布局在桌面上运行它,并且在为Android构建它时它仍在工作:)太棒了!在我的Android设备上就像一个符咒一样工作:)但是,它在我的桌面上不工作,因为它无法从该目录中找到fxml文件。你知道如何让它同时在Android和桌面上运行吗?我考虑提供两个路径,一个用于Android设备,另一个用于桌面版本,然后检查可以找到哪个文件。简单的方法是在eclipse中使用src/main/resources
作为源文件夹
。然后您可以使用src\main\resources\assets\sample\u layout.fxml
中的布局在桌面上运行它,并且在为Android构建它时它仍在工作:)