Как мгновенно обновить XML-документ после добавления в него узла?

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

Декларация:

    private DocumentBuilderFactory documentFactory;
    private DocumentBuilder documentBuilder;
    private Document xmlDoc;
    private Node rootNode;
    private static Node dataNode;

Назначение в конструкторе:

    try {
        documentFactory = DocumentBuilderFactory.newInstance();
        documentBuilder = documentFactory.newDocumentBuilder();
        xmlDoc = documentBuilder.parse(Main.class.getResourceAsStream("Calendar.xml"));
        rootNode = xmlDoc.getDocumentElement();
        dataNode = rootNode.getChildNodes().item(0);
    } catch(ParserConfigurationException | SAXException | IOException e) {e.printStackTrace(System.out);}

Узел создается и добавляется в dataNode после нажатия кнопки, затем файл обновляется следующим образом:

    try {
        OutputFormat outFormat = new OutputFormat(xmlDoc);

        try (FileOutputStream outStream = new FileOutputStream("src/virtualagenda/Calendar.xml")) {
            XMLSerializer serializer = new XMLSerializer(outStream, outFormat);
            serializer.serialize(xmlDoc);

            outStream.flush();
            outStream.close();
        }
    }catch(IOException e) {e.printStackTrace(System.out);}

person alexanderd5398    schedule 18.01.2015    source источник
comment
В чем ваша проблема/ошибка?   -  person henje    schedule 19.01.2015
comment
@henje XML-файл не обновляется, как только я его сохраняю. Мне нужно щелкнуть файл XML вне программы, чтобы обновить его.   -  person alexanderd5398    schedule 19.01.2015
comment
Это неправильно. Размещенный вами код немедленно записывается в файл. Щелчок по файлу вне программы не может заставить программу записать файл. Предложение не начинает иметь смысл. Чтобы избежать необходимости «нажимать на файл XML ..., чтобы обновить его», я предлагаю вам попробовать F5 или что-то еще, что обновляет ваш проводник. Это не проблема кодирования. NB сброс перед закрытием является избыточным.   -  person user207421    schedule 19.01.2015
comment
@EJP Задолго до того, как я нажму на файл, программа не отображает то, что я в нее написал. После того, как я нажму на него, программа правильно отобразит новый узел.   -  person alexanderd5398    schedule 19.01.2015
comment
И я предлагаю вам попробовать F5 или что-то еще, что обновляет ваш проводник, совсем не помогает моей проблеме.   -  person alexanderd5398    schedule 19.01.2015
comment
Не изложение вашей проблемы в понятной форме не поможет вам получить здесь решения. Я сделал все возможное, но достаточно догадок.   -  person user207421    schedule 20.01.2015
comment
@EJP Я пытался показать свою проблему как можно лучше. Я, очевидно, новичок, поэтому вместо этого вы могли бы предложить, где еще может возникнуть эта проблема. И я не ценю, что вы отмечаете мои другие вопросы как дубликаты. Я добавил туда больше деталей и попробовал что-то другое. Сделал репост, чтобы больше людей увидело. Я пытаюсь решить свою проблему, а вы не помогаете.   -  person alexanderd5398    schedule 20.01.2015


Ответы (1)


Вместо того, чтобы загружать ваш документ в конструктор, вы должны создать некоторые подпроцессы, такие как

  1. Загрузите XML из файла в Document
  2. Создайте/обновите свой графический интерфейс, учитывая параметр Document
person ControlAltDel    schedule 18.01.2015
comment
Не могли бы вы привести пример? Я не уверен, как использовать подпроцессы, поэтому учебник тоже был бы отличным. - person alexanderd5398; 19.01.2015
comment
Зачем ему это делать, и как это решит эту проблему? Не ответ. - person user207421; 19.01.2015