我有一个简单的JavaFX项目。它包括:
控制器MainController.java有方法(按钮的处理程序):
public void openWindow(ActionEvent event) {
Pane root = null;
try {
System.out.println("URL: " + getClass().getResource("../view/SecondaryWindow.fxml"));
FXMLLoader loader = new FXMLLoader(getClass().getResource("../view/SecondaryWindow.fxml") );
root = loader.load();
}
catch(Exception e) {
e.getMessage();
e.printStackTrace();
}
if (root != null) {
Scene scene = new Scene(root,400,100);
Stage secStage = new Stage();
secStage.setTitle("Secondary Window");
secStage.setScene(scene);
secStage.show();
}
}
如果从编译文件运行项目,则代码getClass().getResource(“../view/secondarywindow.fxml”)返回正确URL。但如果我从jar-file运行project,则返回null。
我使用以下方式编译文件:
javac -d bin src\app\Main.java
javac -d bin src\app\controller\*.java
XCOPY src\app\view\*.fxml bin\app\view /s /e /d /y
并使用以下方法运行编译文件:
java -classpath bin app.Main
目录bin具有类似的文件结构:
我使用以下方法创建jar文件:
jar cvfm SimpleFXMLApp.jar manifest.mf -C bin app
MANIFEST.MF
Manifest-Version: 1.0
Created-By: Denys Selivanov
Main-Class: app.Main
为什么相对路径在JAR-file中不起作用,而getClass().getResource(“../view/secondarywindow.fxml”)返回null?怎么修复?
解决问题的方法之一是将控制器和视图文件保存在一个目录中,并使用相对路径“secondarywindows.fxml”,但我希望保留项目的结构文件。
你可以在这里下载我的项目。此链接将访问30天。
我看到投票关闭说它是这个问答的重复,但我不认为它解释了..
的细节,所以这里是:
..
适用于文件系统上的资源,因为..
是文件系统上指向父目录的实际条目。但这在JAR中不存在,所以当类和资源打包在JAR中时,指向“父包”是行不通的。
解决方案:如果可以接受controller类对main
类的依赖关系,则可以改为执行以下操作:
Main.class.getResource("view/SecondaryWindow.fxml")
在任何情况下,您都需要引用包层次结构中足够高的类,或者使用根包的绝对路径(getClass().getClassLoader().getResource(“app/view/secondarywindow.fxml”)
)。
问题内容: 我有以下结构 include.php文件具有以下内容 在index.php页面中,我包括了 当我打开页面index.php时,出现以下警告和致命错误。我不明白是什么原因导致此错误。当我给出绝对路径时,它可以工作。但是我相信绝对的路线不是一个好主意。 提前致谢 问题答案: 采用 获取脚本的当前路径,这应该可以解决您的问题。 所以: 这样可以防止您可以从其他文件夹运行PHP脚本的情况,因此
一个Java代码如下: 如果我从扩展类路径中删除hello.jar,并将其复制到也包含rt.jar的引导类路径(usr/lib/jvm/java-8-openjdk-amd64/jre/lib/),那么我的程序就无法工作。 据我所知,引导程序或扩展类加载程序中的所有jar文件都可以在程序中使用。如果这个异常是正确的,为什么Java会抛出这个异常?如果我不正确,请指导我。
问题内容: 我的程序需要读取一些文本配置文件。我当前的代码是: 当我在eclipse中本地运行它时,此方法有效,尽管我确实必须进行破解以处理路径名中的空间。配置文件与上述方法位于同一软件包中。但是,当我将应用程序导出为jar时,出现了问题。该jar位于共享的映射网络驱动器Z:上。当我从命令行运行应用程序时,出现此错误: java.io.FileNotFoundException:文件:\ Z:\
问题内容: 我想知道如何指定存储在Java项目的src文件夹中的文本文件的相对路径名。我想用此文本文件的路径存储一个字符串。例如,如果我的java项目的src文件夹中有example.txt,我将如何查找其相对路径?我也在我的主机中这样做,所以我在使用.getResource()时遇到了麻烦。我该怎么做?谢谢。 我的文件路径是从Eclipse /MyProject/src/data.txt中的属性
问题内容: 如果将PHP脚本作为cron脚本运行,则如果使用相对路径,则include常常会失败。例如,如果您有 在命令行上运行时会找到文件foo.php,但从cron脚本运行时找不到。 一个典型的解决方法是先chdir到工作目录,或使用绝对路径。但是,我想知道导致此行为的cron和shell之间的区别是什么。在cron脚本中使用相对路径时,为什么会失败? 问题答案: 从cron运行时,脚本的工作
我试图合并2个简单的程序。我想制作成一个。jar文件,这是我编写的代码:(Project1.jar和Project2.exe都打包到这个。jar中) 当我在eclipse中运行项目时,一切都很好(两个文件都像我想要的那样被执行)。但是当我将这个项目导出到。jar并运行它时,什么也没有发生。我认为它与文件路径有关,因为它在Eclipse中运行时工作得很好。怎么解决这个?