找不到 file.Why 的路径?
Cannot find the path of a file.Why?
我想在 Scene Builder enter image description here 中制作一个看起来像这样的 "Login" 框,但是当我在主程序中按 运行 时,它给了我很多错误并且我看到(使用调试器)它找不到 fxml file.Why?
的路径
这是我的主
public class Main extends Application{
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage = primaryStage;
primaryStage.setTitle("Application");
Scene scene = new Scene(initRootLayout());
primaryStage.setScene(scene);
primaryStage.show();
}
public AnchorPane initRootLayout() {
try {
//Load root layout from fxml file.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class.getResource("/D:/Faculta/Lab_ISS/src/main/java/view_FXML/Login.fxml"));
AnchorPane rootLayout = (AnchorPane) loader.load();
// BorderPane rootLayout = (BorderPane) loader.load();
return rootLayout;
} catch (IOException e) {
System.out.println("Muie");
}
return null;
}
public static void main(String[] args) {
launch(args);
}
}
和Login.fxml可以在这张照片中看到enter image description here
而不是 /D:/Faculta/Lab_ISS/src/main/java/view_FXML/Login.fxml" 我也试过
*D:/Faculta/Lab_ISS/src/main/java/view_FXML/Login.fxml(没有第一个 / )
view_FXML/Login.fxml
java/view_FXML/Login.fxml
main/java/view_FXML/Login.fxml
D:\\Faculta\\Lab_ISS\\src\main\\java\\view_FXML\\Login.fxml*
将 Login.fxml
文件移动到 src/main/resources
并使用 Main.class.getResource("/Login.fxml");
获取资源
路径不正确。请考虑 JavaDoc of Class
, function getResource
.
Finds a resource with a given name. The rules for searching resources associated with a given class are implemented by the defining class loader of the class. This method delegates to this object's class loader. If this object was loaded by the bootstrap class loader, the method delegates to ClassLoader.getSystemResource(java.lang.String).
Before delegation, an absolute resource name is constructed from the given resource name using this algorithm:
If the name begins with a '/' ('\u002f'), then the absolute name of the resource is the portion of the name following the '/'.
Otherwise, the absolute name is of the following form:
modified_package_name/name
Where the modified_package_name is the package name of this object with '/' substituted for '.' ('\u002e').
从 hard-coded 路径检索资源有问题。相反,创建一个名为 "resource" 的源文件夹。 (你如何做取决于你是否使用 IDE,你也可以在你的 src 文件夹中创建那个文件夹。)这样,资源在构建和打包过程中跟随你的代码。
要查找您的资源,请查看 ClassLoader class' getResource() 方法。这将在 classpath 上搜索您指定的路径,并为您提供一个 URL,您可以将其转换为 URI。然后,使用 new File(uri) 或类似的方法。
您的问题出在以下环节
Main.class.getResource(String path)
路径不应是设备上的绝对路径,而应是相对于类路径的路径。因此,您需要将 xml 复制到项目 运行 所在的同一文件夹中。
我想在 Scene Builder enter image description here 中制作一个看起来像这样的 "Login" 框,但是当我在主程序中按 运行 时,它给了我很多错误并且我看到(使用调试器)它找不到 fxml file.Why?
的路径这是我的主
public class Main extends Application{
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage = primaryStage;
primaryStage.setTitle("Application");
Scene scene = new Scene(initRootLayout());
primaryStage.setScene(scene);
primaryStage.show();
}
public AnchorPane initRootLayout() {
try {
//Load root layout from fxml file.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class.getResource("/D:/Faculta/Lab_ISS/src/main/java/view_FXML/Login.fxml"));
AnchorPane rootLayout = (AnchorPane) loader.load();
// BorderPane rootLayout = (BorderPane) loader.load();
return rootLayout;
} catch (IOException e) {
System.out.println("Muie");
}
return null;
}
public static void main(String[] args) {
launch(args);
}
}
和Login.fxml可以在这张照片中看到enter image description here
而不是 /D:/Faculta/Lab_ISS/src/main/java/view_FXML/Login.fxml" 我也试过
*D:/Faculta/Lab_ISS/src/main/java/view_FXML/Login.fxml(没有第一个 / )
view_FXML/Login.fxml
java/view_FXML/Login.fxml
main/java/view_FXML/Login.fxml
D:\\Faculta\\Lab_ISS\\src\main\\java\\view_FXML\\Login.fxml*
将 Login.fxml
文件移动到 src/main/resources
并使用 Main.class.getResource("/Login.fxml");
路径不正确。请考虑 JavaDoc of Class
, function getResource
.
Finds a resource with a given name. The rules for searching resources associated with a given class are implemented by the defining class loader of the class. This method delegates to this object's class loader. If this object was loaded by the bootstrap class loader, the method delegates to ClassLoader.getSystemResource(java.lang.String). Before delegation, an absolute resource name is constructed from the given resource name using this algorithm:
If the name begins with a '/' ('\u002f'), then the absolute name of the resource is the portion of the name following the '/'.
Otherwise, the absolute name is of the following form: modified_package_name/name Where the modified_package_name is the package name of this object with '/' substituted for '.' ('\u002e').
从 hard-coded 路径检索资源有问题。相反,创建一个名为 "resource" 的源文件夹。 (你如何做取决于你是否使用 IDE,你也可以在你的 src 文件夹中创建那个文件夹。)这样,资源在构建和打包过程中跟随你的代码。
要查找您的资源,请查看 ClassLoader class' getResource() 方法。这将在 classpath 上搜索您指定的路径,并为您提供一个 URL,您可以将其转换为 URI。然后,使用 new File(uri) 或类似的方法。
您的问题出在以下环节
Main.class.getResource(String path)
路径不应是设备上的绝对路径,而应是相对于类路径的路径。因此,您需要将 xml 复制到项目 运行 所在的同一文件夹中。