Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中更改javafx文件的路径_Java_Maven_Javafx_Maven 2 - Fatal编程技术网

在java中更改javafx文件的路径

在java中更改javafx文件的路径,java,maven,javafx,maven-2,Java,Maven,Javafx,Maven 2,我有一个Maven项目,我正在尝试使用javafx(我正在使用Eclipse) 我想更改文件的路径。我有 Parent root = FXMLLoader.load(getClass().getResource("/application/Main.fxml")); 这在下一个文件夹结构中运行良好 src main java com projectFolder main.java application

我有一个Maven项目,我正在尝试使用javafx(我正在使用Eclipse) 我想更改文件的路径。我有

Parent root = FXMLLoader.load(getClass().getResource("/application/Main.fxml"));
这在下一个文件夹结构中运行良好

src
  main
    java
      com
        projectFolder
           main.java
      application
        Main.fxml
但我想要像这样的东西

src
  main
    java
      com
        projectFolder
           main.java
        application
           Main.fxml
我尝试了
Parent root=fxmloader.load(getClass().getResource(“/com/application/Main.fxml”)但不起作用

我得到下一个错误

   [JavaFX Application Thread] ERROR com.application.Main - javafx.fxml.LoadException: 
/C:/Users/user/workspace/git/project/target/classes/com/application/Main.fxml:15

有人知道它有什么问题吗?

我不建议让人困惑的文件结构

但是在这种情况下,我相信您需要使用到资源的相对路径:
。/application/Main.fxml


getClass().getResource()
要求资源与调用类位于同一目录中。事实并非如此,因此您需要Java使用
备份一个目录。

假设您和我的项目结构确实相同,如下图所示:

要加载FXML文件,应使用如下示例所示的完整路径:

package main.java.com.projectFolder;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {

        FXMLLoader loader = new FXMLLoader(this.getClass().getResource("/main/java/com/application/Main.fxml"));

        Parent root = loader.load();
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }
}
现在,如果您实际使用的是相对路径,如:

FXMLLoader loader = new FXMLLoader(this.getClass().getResource("../application/Main.fxml"));
只要您在Eclipse运行时环境中编译和运行代码,上述方法也可以使用。当您将项目导出到JAR文件并尝试执行它时,您将得到与开始时相同的错误。你可以在类似的帖子中读到:


编辑:对于Maven项目,您应该考虑将FXML文件重新定位到SRC/主/资源/文件夹。您可以在本文中找到更多信息:

您如何运行应用程序?以/Java应用程序的形式运行请在IDE上截取目录结构的屏幕快照,并将其添加到您的问题中,因为我需要了解您所说的
projectFolder
是什么意思,以及为什么使用helper方法时会出现双斜杠!我上传了文件夹结构。双斜杠这是一个打字错误,stackoverflow不允许我编辑它。这实际上可以解决问题,但我很确定,当你将项目导出到一个可执行的JAR文件时,这是行不通的。至少我过去在使用相对路径时遇到了很多问题。你推荐什么结构?如果我做一些事情,比如fxmloader.load(getClass().getResource(“../application/Main.fxml”);我得到了其他类型的错误:java.lang.NullPointerException:Location是必需的。谢谢,但我的错误与这个FXMLLoader=new FXMLLoader(this.getClass().getResource(“/main/java/com/application/main.fxml”)完全相同;但仍然会收到此错误[JavaFX应用程序线程]错误com.Application.Main-java.lang.NullPointerException:位置是必需的。@andreasViena有趣。。在这种情况下,有两种可能,要么这是一个Maven/Gradle Java项目,它以不同的方式处理路径并具有不同的项目结构,要么你没有与我相同的项目结构,向我们展示eclipse上的Navigator视图的图片可能会有所帮助是的,我有相同的结构。我去检查一下那辆车thing@AndreasViena创建项目时,选择“Java项目”选项,对吗?您正在使用哪个IDE(Eclipse、InteliJ等)?您正在运行什么Java版本?也许问题出在别的地方。这是一个专业的项目。我正在使用Eclipse,Java8