Мне кажется, я обнаружил в своем коде проблему с котом Шредингера. Тело функции никогда не выполняется, если я изменяю одну строку в теле той же функции; но если я оставлю эту строку в покое, функция будет выполнена. Каким-то образом программа заранее знает, что такое тело, и решает не называть его ...
Я работаю над приложением Eclipse RCP на Java, и мне нужно использовать их Система обработки ошибок . По ссылке на странице,
Существует два способа добавления обработчиков в поток обработки.
- с использованием точки расширения org.eclipse.ui.statusHandlers
- консультантом рабочей среды и его методом {@link WorkbenchAdvisor # getWorkbenchErrorHandler ()}.
Итак, я пошел в свой ApplicationWorkbenchAdvisor
класс и переопределил getWorkbenchErrorHandler
метод:
@Override
public synchronized AbstractStatusHandler getWorkbenchErrorHandler()
{
System.out.println("IT LIVES!");
if (myErrorHandler == null)
{
AbstractStatusHandler delegate = super.getWorkbenchErrorHandler();
MyStatusHandler otherThing = new MyStatusHandler(delegate);
myErrorHandler = otherThing;
}
return myErrorHandler;
}
MyStatusHandler
предназначен для использования в качестве обработчика delegate
. Я переименовал класс для анонимности. Как и прежде, эта функция никогда не вызывается. Печать никогда не происходит, и даже в режиме отладки с точками останова они никогда не срабатывают. Теперь странная часть: если я изменю строку, которая присваивает myErrorHandler
на
myErrorHandler = delegate;
тогда вызывается функция ; фактически несколько раз!
Эта проблема поставила меня в тупик и двух опытных коллег по java, поэтому я надеюсь, что хорошие люди из SO могут помочь нам!