Я в настоящее время разрабатывает Затмения-RCP приложение, которое хранит для каждого проекта настройки с помощью EclipsePreference механизм через ProjectScope. Сначала это работало очень хорошо, но мы столкнулись с трудностями при доступе к этим предпочтениям (read-) в многопоточных сценариях, в то же время в рабочую область вносятся изменения. По-видимому, проблематично обращаться к этому предпочтительному узлу (ProjectScope.getNode()
), в то время как проект удаляется асинхронным действием пользователя (щелкните правой кнопкой мыши Project -> Delete Project). В таких случаях мы получаем довольно смесьпоточно-способ доступа EclipsePreferences (проект)
org.osgi.service.prefs.BackingStoreException
java.io.FileNotFoundException
org.eclipse.core.runtime.CoreException
По существу все они жалуются, что основной файл больше не существует.
Первоначальные попытки исправить это с помощью чеков, как IProject.exists()
или isAccessible()
и даже так далеко, как проверка наличия файла фактических .prefs были тщетны, как и ожидалось: они только делают исключения менее вероятно, но на самом деле не мешает их.
Так что мой вопрос: как вы должны безопасно обращаться к вещам вроде ProjectScope.getNode()
? Вам нужно зайти так далеко, чтобы каждый читать в WorkspaceJob
или есть какой-то другой, умный способ предотвратить вышеупомянутые проблемы, такие как помещение доступа для чтения в Display.asyncExec()
?
Хотя я и пытался, я действительно не нашел ответы на вышеупомянутый вопрос в документации Eclipse.
Благодарим за этот быстрый ответ. Такое решение было именно тем, что я имел в виду, и он отлично работает для API EclipsePreferences (он выжил в stresstest с использованием UI-автоматизации с QF-Test). – Ilmarinen123