Java 运行应用程序sample.Main时出现异常

Java 运行应用程序sample.Main时出现异常,java,eclipse,javafx,fxml,Java,Eclipse,Javafx,Fxml,我正在用JavaFX制作一个ToDo应用程序,但它显示了这个错误(即使没有数据库,登录系统也只想简单地运行它): 我喜欢编码,但不会在出现错误时编码,这就是我被称为ErrorLane的原因 Main.java: package sample; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; im

我正在用JavaFX制作一个ToDo应用程序,但它显示了这个错误(即使没有数据库,登录系统也只想简单地运行它): 我喜欢编码,但不会在出现错误时编码,这就是我被称为ErrorLane的原因

Main.java:

package sample;

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 {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("C:\\Users\\arhaan\\eclipse-workspace\\ToDoApp\\src\\sample\\viewlogin.fxml"));
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root, 300, 275));
        primaryStage.show();
    }


    public static void main(String[] args) {
        launch(args);
    }
}
login.fxml:

<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.GridPane?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<GridPane fx:controller="sample.Controller"
          xmlns:fx="http://javafx.com/fxml" fx:controller="application.FXMLDocumentController" alignment="center" hgap="10" vgap="10">
</GridPane>
“错误”是由于尝试使用绝对路径作为FXMLLoader的参数而导致的NPE。FXMLLoader采用URL,因此要将绝对路径转换为可传递给FXMLLoader的URL,请使用FileInputStream或转换为URL:

FileInputStream:

 Parent root = FXMLLoader.load(new FileInputStream("C:\\Users\\arhaan\\eclipse-workspace\\ToDoApp\\src\\sample\\login.fxml"));
转换为URL:

Parent root = FXMLLoader.load(Paths.get("C:\\Users\\arhaan\\eclipse-workspace\\ToDoApp\\src\\sample\\login.fxml").toUri().toURL());

这回答了你的问题,但这是一个糟糕的设计。为源代码使用适当的结构,并使.fxml位于同一包的类路径中,或者直接与控制器一起,或者位于包含相同包布局的专用资源目录中。对于硬编码的绝对路径,您的代码是不可移植的,需要其他任何人在其系统上具有相同的精确路径才能运行您的代码。

这是否回答了您的问题@JCWasmx86:否我将其移动到sample.view中,但仍有相同的错误,但仅在sample.viewNo不起作用。对不起,我复制粘贴过快,已编辑以删除不需要的getClass().getResource()这也不起作用。您在路径位置有一个名为viewlogin.fxml的实际文件吗?该文件名为login.fxml,因为我忘记了\\,但当我用\\尝试您的代码时,它也不起作用。
Parent root = FXMLLoader.load(Paths.get("C:\\Users\\arhaan\\eclipse-workspace\\ToDoApp\\src\\sample\\login.fxml").toUri().toURL());