Я ищу автоматический способ обнаружить нарушения единственной потоковой политики Swing в моем коде. Я ищу что-то вроде некоторого кода AOP, Вы заскакиваете в VM, в то время как приложение колебания работает, и имейте его, регистрируют любые места, где компонент колебания изменяется за пределами EDT.
Я не парень AOP, но я предположил бы создавать прокси AOP вокруг каждого java.swing.* класс, который похож
AOP_before(Method m, Object args[]) {
if (!isEventDispatchThread(Thread.currentThread()) {
logStack(new RuntimeException("violation!"));
}
invoke(m, args);
}
Кто-либо знает о проекте или утилите, которая делает это?
Я не использовал именно этот, но этот CheckThreadViolationRepaintManager должен помочь.
Однако он требует добавления:
RepaintManager.setCurrentManager(new CheckThreadViolationRepaintManager());
в ваш код.
Я нашел сообщение в блоге 4-летней давности, описывающее некоторые решения , но мне было бы очень интересно, если бы вы нашли то, которое обнаруживает наибольшее количество нарушений EDT. RepaintManager, похоже, не надежен при обнаружении всех нарушений.