2017-01-28 17 views
0

У меня есть эта корзина покупок увидеть здесь 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(); 
     } 
    } 
+0

Это буквально перескакивает? Это означает, что ваш 'itemFile' равен нулю? – Cornelius

+0

Что возвращает 'getItemFilePath()' 'и' saveItemDataToFile'? В противном случае вы просто не передаете данные классу 'mainApp' ... – fabian

+0

Эй, ребята, я обновил свой вопрос с помощью дополнительного кода. –

ответ

0

В getItemFilePath метод, который вы пытаетесь получить "F ilepath" предпочтение:

String filePath = prefs.get("Filepath", null); 

Но в setItemFilePath метод вы устанавливаете «файл P ath» предпочтение:

prefs.put("filePath", file.getPath()); 

Поскольку предпочтения ключи чувствительны к регистру, так же как и любой другой String, вы всегда получаете значение по умолчанию, которое является нулевым.

+0

Блестяще благодарим вас! –