Совершенно новый для JavaFX здесь.У меня есть приложение, которое сохраняет и загружает данные веб-сайта в файл XML и из него.
Модель Website
используется в ObservableList, и, как я понимаю, вы не можете прикрепить @XmlElement
кObservableList, поэтому я добавил обертку для него (в основном, следуя этому уроку: https://code.makery.ch/library/javafx-tutorial/part5/).
Когда я пытаюсь его разархивировать, исключение выдается в этой строке кода:
WebsiteListWrapper wrapper = (WebsiteListWrapper) um.unmarshal(file);
Здесьостальная часть моего кода:
MainApp.java:
public void loadWebsiteDataFromFile(File file) {
try {
JAXBContext context = JAXBContext.newInstance(WebsiteListWrapper.class);
Unmarshaller um = context.createUnmarshaller();
WebsiteListWrapper wrapper = (WebsiteListWrapper) um.unmarshal(file);
System.out.println(um.unmarshal(file));
websiteData.clear();
websiteData.addAll(wrapper.getWebsites());
setWebsiteFilePath(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();
}
}
Website.java (Модель):
public class Website {
private final StringProperty website;
private final BooleanProperty accountExists;
private final BooleanProperty keep;
private final BooleanProperty delete;
public Website() {
this(null, true);
}
public Website(String website, boolean accountExists) {
this.website = new SimpleStringProperty(website);
this.accountExists = new SimpleBooleanProperty(accountExists);
this.keep = new SimpleBooleanProperty(false);
this.delete = new SimpleBooleanProperty(false);
}
public StringProperty websiteProperty() {
return website;
}
public BooleanProperty hasAccountProperty() {
return accountExists;
}
public BooleanProperty keepProperty() {
return keep;
}
public BooleanProperty deleteProperty() {
return delete;
}
public String getWebsite() {
return website.get();
}
public boolean getAccountExists() {
return accountExists.get();
}
public boolean getKeep() {
return keep.get();
}
public boolean getDelete() {
return delete.get();
}
public void setWebsite(String website) {
this.website.set(website);
}
public void setAccountExists(boolean bool) {
accountExists.set(bool);
}
public void setKeep(boolean bool) {
keep.set(bool);
}
public void setDelete(boolean bool) {
delete.set(bool);
}
}
WebsiteListWrapper :
@XmlRootElement(name = "websites")
public class WebsiteListWrapper {
private List<Website> websites;
@XmlElement(name = "website")
public List<Website> getWebsites() {
return websites;
}
public void setPersons(List<Website> websites) {
this.websites = websites;
}
}