Как генерировать исключения из RepaintManager

В связи с моим вопросом ( может быть ) я нашел другой тип исключения, который я не смог поймать и распечатать из streamа SwingWorker .

Как я могу генерировать исключения RepaintManager ?

Я прочитал этот CheckThreadViolationRepaintManager и этот подход Alexander Potochkin , но ничто, кажется, не решает мои проблемы.

Если это помогает, в приведенном ниже примере вы можете распечатать несколько вариантов следующего Exception , в основном для каждой фазы инициализации делегата интерфейса фрейма. Я использовал CheckThreadViolationRepaintManager , но вариант AspectJ выглядит интересным.

 java.lang.Exception
     при EDTViolation $ CheckThreadViolationRepaintManager.checkThreadViolations (EDTViolation.java:43)
     при EDTViolation $ CheckThreadViolationRepaintManager.addDirtyRegion (EDTViolation.java:37)
     в javax.swing.JComponent.repaint (JComponent.java:4734)
     в java.awt.Component.repaint (Component.java:3168)
     в javax.swing.JComponent.setFont (JComponent.java:2727)
     в javax.swing.LookAndFeel.installColorsAndFont (LookAndFeel.java:191)
     в javax.swing.plaf.basic.BasicPanelUI.installDefaults (BasicPanelUI.java:49)
     в javax.swing.plaf.basic.BasicPanelUI.installUI (BasicPanelUI.java:39)
     в javax.swing.JComponent.setUI (JComponent.java:662)
     в javax.swing.JPanel.setUI (JPanel.java:136)
     в javax.swing.JPanel.updateUI (JPanel.java:109)
     на javax.swing.JPanel. (JPanel.java:69)
     в javax.swing.JPanel. (JPanel.java:92)
     на javax.swing.JPanel. (JPanel.java:100)
     в javax.swing.JRootPane.createGlassPane (JRootPane.java:528)
     в javax.swing.JRootPane. (JRootPane.java:348)
     в javax.swing.JFrame.createRootPane (JFrame.java:255)
     в javax.swing.JFrame.frameInit (JFrame.java:236)
     в javax.swing.JFrame. (JFrame.java:159)
     при EDTViolation.main (EDTViolation.java:12)
 ...
 import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.RepaintManager; import javax.swing.SwingUtilities; /** @see https://stackoverflow.com/questions/7787998 */ public class EDTViolation { public static void main(String args[]) { RepaintManager.setCurrentManager(new CheckThreadViolationRepaintManager()); JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.pack(); f.setVisible(true); } private static class CheckThreadViolationRepaintManager extends RepaintManager { //http://weblogs.java.net/blog/alexfromsun/archive/2006/02/debugging_swing.html private boolean completeCheck = true; private WeakReference lastComponent; public CheckThreadViolationRepaintManager(boolean completeCheck) { this.completeCheck = completeCheck; } public CheckThreadViolationRepaintManager() { this(true); } public boolean isCompleteCheck() { return completeCheck; } public void setCompleteCheck(boolean completeCheck) { this.completeCheck = completeCheck; } @Override public synchronized void addInvalidComponent(JComponent component) { checkThreadViolations(component); super.addInvalidComponent(component); } @Override public void addDirtyRegion(JComponent component, int x, int y, int w, int h) { checkThreadViolations(component); super.addDirtyRegion(component, x, y, w, h); } private void checkThreadViolations(JComponent c) { if (!SwingUtilities.isEventDispatchThread() && (completeCheck || c.isShowing())) { boolean repaint = false; boolean fromSwing = false; boolean imageUpdate = false; StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); for (StackTraceElement st : stackTrace) { if (repaint && st.getClassName().startsWith("javax.swing.") && // for details see // https://swinghelper.dev.java.net/issues/show_bug.cgi?id=1 !st.getClassName().startsWith("javax.swing.SwingWorker")) { fromSwing = true; } if (repaint && "imageUpdate".equals(st.getMethodName())) { imageUpdate = true; } if ("repaint".equals(st.getMethodName())) { repaint = true; fromSwing = false; } if ("read".equals(st.getMethodName()) && "javax.swing.JEditorPane".equals(st.getClassName())) { // Swing reads html from a background thread return; } } if (imageUpdate) { //assuming it is java.awt.image.ImageObserver.imageUpdate(...) //image was asynchronously updated, that's ok return; } if (repaint && !fromSwing) { //no problems here, since repaint() is thread safe return; } //ignore the last processed component if (lastComponent != null && c == lastComponent.get()) { return; } lastComponent = new WeakReference(c); violationFound(c, stackTrace); } } protected void violationFound(JComponent c, StackTraceElement[] stackTrace) { System.out.println(); System.out.println("EDT violation detected"); System.out.println(c); for (StackTraceElement st : stackTrace) { System.out.println("\tat " + st); } } } } 

Создайте свое собственное исключение

 class RepaintManagerException extends Exception { String msg; RepaintManagerException() { msg = new String("type message here"); } } 

Применение

 public class My_Exception { public static void main (String args [ ]) { try { // your code if (expression) throw new RepaintManagerException( ); } catch (RepaintManagerException e) { System.out.println (e); } } } 
  • Открытый Java-обработчик исключений Java
  • Разница между java.lang.RuntimeException и java.lang.Exception
  • Переключить «Перерыв при вызове исключения». Использование макроса или комбинации клавиш
  • Разница между использованием Throwable и Exception в попытке поймать
  • Как распространять исключения между streamами?
  • Исключение Java ArrayIndexOutOfBounds
  • простой пример IPython вызывает исключение на sys.exit ()
  • Поддерживает ли C ++ «наконец» блоки? (И что это за «RAII», о котором я все время слышу?)
  • Исключение SQLite: SQLite Занято
  • Почему я получаю «должен быть пойман или объявлен брошен» в моей программе?
  • Работа с ошибкой «java.lang.OutOfMemoryError: PermGen space»
  • Давайте будем гением компьютера.