IOException: процесс не может получить доступ к файлу «путь к файлу», поскольку он используется другим процессом

Если вы не хотите ничего фантастического, вы можете просто добавить UndoManager . Ваш Document будет запускать UndoableEdit каждый раз, когда вы добавляете или удаляете текст. Чтобы отменить и повторить каждое изменение, просто вызовите эти методы в UndoManager.

Недостатком этого является UndoManager, который добавляет новое редактирование каждый раз, когда пользователь вводит что-то, поэтому набрав «яблоко», вы оставите 5 изменений , отменяется по одному. Для моего текстового редактора я написал обертку для редактирования, в которой хранится время, которое было сделано в дополнение к изменению и смещению текста, а также UndoableEditListener, который объединяет новые изменения в предыдущие, если есть только короткий промежуток времени между (0,5 секунды хорошо работает для меня).

Это хорошо работает для общего редактирования, но вызывает проблемы, когда делается массовая замена. Если у вас был документ с 5000 экземплярами «яблока», и вы хотели заменить его «оранжевым», вы в конечном итоге получили бы 5000 исправлений, сохраняя «яблоко», «оранжевое» и смещение. Чтобы уменьшить объем используемой памяти, я рассматривал это как отдельный случай для обычных изменений и вместо этого хранили «яблоко», «оранжевый» и массив из 5000 смещений. Я еще не успел применить это, но я знаю, что это вызовет некоторые головные боли, когда несколько строк соответствуют условию поиска (например, регистр без учета регистра, поиск по регулярному выражению).

145
задан Rob 29 March 2017 в 01:23
поделиться