当我尝试通过控制台运行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中也没有文件丢失。可能是什么原因造成的。 提前谢谢。
答案 0 :(得分:1)
..
适用于文件系统上的资源,因为它是文件系统上的实际条目,指向父目录。
但是在jar中并不存在,所以当类和时,它不会指向父目录。资源包装在一个罐子里。
所以我们不能使用..
来指示文件位置,因此我们必须使用项目路径中的绝对路径。