尝试使用jar文件运行应用程序时发生java NullPointerException

时间:2018-01-17 05:27:06

标签: javafx executable-jar

当我尝试通过控制台运行jar文件时,在登录事件期间,它会给出一个异常“java.lang.NullPointerException:Location is required”。 但是当我使用intellij IDE运行应用程序时,它工作正常。

@FXML
public void loginAction(ActionEvent event) throws Exception {
    errorLabel.setText("");
    authenticate(event);
}

    private void authenticate(Event event) throws Exception {

    if (validateInput()) {
        String username = userName.getText().trim();
        User user = UserDAO.searchUserByName(username);

        if (user == null) {
            userName.setText("");
            password.setText("");
            Alert alert = new Alert(Alert.AlertType.ERROR);
            alert.setTitle("Login Error");
            alert.setHeaderText("Failure message");
            alert.setContentText("Invalid username!!");
            alert.showAndWait();

        } else {

            String userPassword = user.getPassword();
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(password.getText().getBytes());
            byte byteData[] = md.digest();
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < byteData.length; i++) {
                sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));

            }

            String role = user.getRole();
            String id = user.getUserId();
            sessionRole = role;
            userId = id;

            if (sb.toString().equals(userPassword)) {

                if (role.equals("Admin")) {
                    windows("../views/admin.fxml", "Admin Dashboard");
                } else {
                    windows("../views/pos.fxml", "Point of Sales");
                }
            } else {
                userName.setText("");
                password.setText("");
                Alert alert = new Alert(Alert.AlertType.ERROR);
                alert.setTitle("Login Error");
                alert.setHeaderText("Failure message");
                alert.setContentText("Invalid password!!");
                alert.showAndWait();

            }

        }

    }
}
   private void windows(String path, String title) throws Exception {
    Stage stage;
    Parent root;
    root = FXMLLoader.load(getClass().getResource(path));
    stage = (Stage) loginButton.getScene().getWindow();
    Scene scene = new Scene(root);
    stage.setTitle(title);
    stage.setScene(scene);
    stage.show();
}

它给出了行的例外:

windows("../views/admin.fxml", "Admin Dashboard");

我也尝试为fxml文件提供绝对路径。它只发生在我使用jar文件运行应用程序时。 jar中也没有文件丢失。可能是什么原因造成的。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

..适用于文件系统上的资源,因为它是文件系统上的实际条目,指向父目录。 但是在jar中并不存在,所以当类和时,它不会指向父目录。资源包装在一个罐子里。

所以我们不能使用..来指示文件位置,因此我们必须使用项目路径中的绝对路径。