У меня есть эта корзина покупок увидеть здесь https://i.stack.imgur.com/9ty3E.pngJavaFX My File Save не работает
и все работает, но сохранить мой файл, что должно произойти, когда вы подаете сохранить и существующий проект открыт и перезаписывает старые xml-файлы, но он полностью пропускает его и переходит к инструкции else.
@FXML
private void handleSave() {
File itemFile = mainApp.getItemFilePath();
if (itemFile != null) {
mainApp.saveItemDataToFile(itemFile);
} else {
handleSaveAs();
}
}
И Heres мой Сохранить как код для справки
@FXML
private void handleSaveAs() {
FileChooser fileChooser = new FileChooser();
// Set extension filter
FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter(
"XML files (*.xml)", "*.xml");
fileChooser.getExtensionFilters().add(extFilter);
// Show save file dialog
File file = fileChooser.showSaveDialog(mainApp.getPrimaryStage());
if (file != null) {
// Make sure it has the correct extension
if (!file.getPath().endsWith(".xml")) {
file = new File(file.getPath() + ".xml");
}
mainApp.saveItemDataToFile(file);
}
}
public File getItemFilePath() {
Preferences prefs = Preferences.userNodeForPackage(MainApp.class);
String filePath = prefs.get("Filepath", null);
if (filePath != null) {
return new File(filePath);
} else {
return null;
}
}
public void setItemFilePath(File file) {
Preferences prefs = Preferences.userNodeForPackage(MainApp.class);
if (file != null) {
prefs.put("filePath", file.getPath());
primaryStage.setTitle("Shopping Basket - " + file.getName());
} else {
prefs.remove("filePath");
primaryStage.setTitle("Shopping Basket");
}
}
public void loadItemDataFromFile(File file) {
try {
JAXBContext context = JAXBContext
.newInstance(BasketListWrapper.class);
Unmarshaller um = context.createUnmarshaller();
BasketListWrapper wrapper = (BasketListWrapper) um.unmarshal(file);
itemData.clear();
itemData.addAll(wrapper.getItems());
setItemFilePath(file);
} catch (Exception e) {
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("Error");
alert.setHeaderText("Could not load data");
alert.setContentText("Could not load data from file:\n"
+ file.getPath());
alert.showAndWait();
}
}
public void saveItemDataToFile(File file) {
try {
JAXBContext context = JAXBContext
.newInstance(BasketListWrapper.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
BasketListWrapper wrapper = new BasketListWrapper();
wrapper.setItems(itemData);
m.marshal(wrapper, file);
setItemFilePath(file);
} catch (Exception e) {
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("Error");
alert.setHeaderText("Could not load data");
alert.setContentText("Could not load data from file:\n"
+ file.getPath());
alert.showAndWait();
}
}
Это буквально перескакивает? Это означает, что ваш 'itemFile' равен нулю? – Cornelius
Что возвращает 'getItemFilePath()' 'и' saveItemDataToFile'? В противном случае вы просто не передаете данные классу 'mainApp' ... – fabian
Эй, ребята, я обновил свой вопрос с помощью дополнительного кода. –