在java中更改javafx文件的路径
我有一个Maven项目,我正在尝试使用javafx(我正在使用Eclipse) 我想更改文件的路径。我有在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
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