The failure is on this line of code: AWTEventMonitor.addFocusListener(this) which resides in ...\classes\sun\awt\windows\accessibility
AWTEventMonitor is a class in jaccess-1_4.jar which is in lib/ext However, just before the failing line is executed, a println shows these two system properties java.ext.dir: null java.class.path: \Program Files\Java\jdk1.6.0_20\demo\jfc\SwingSet2\SwingSet2.jar so that seems to explain why a class in a jar in lib/ext won't be found (unless there is some other internal means being used to find jar files). Since I suspect I'll eventually merge this package into the jdk, to continue debugging I extracted the jar into the classes directory. Pete === Pete Brunet wrote: > The class loading info wasn't helpful. If I run jdb I get the log shown > below. So far the debug info isn't making sense. Hopefully it will > tomorrow :-) If someone can decipher this from the log that would be > helpful. > > Exception occurred: java.lang.NoClassDefFoundError (to be caught at: > com.sun.java.accessibility.util.EventQueueMonitor.addTopLevelWindow(), > line=279 bci=119)"thread=AWT-EventQueue-0", > sun.awt.windows.accessibility.AccessibleContextMirror.<init>(), line=584 > bci=766 > > Also, do I need to change my build in order to use jdb? One source > indicated I need to use a -g option at compile time. Perhaps this is > why the jdb threads output doesn't show thread IDs. > > Thanks, Pete > > === log of debug session === > C:\SwingSet2>c:\OpenJDK-b96m\jdk7\build\windows-i586-fastdebug\bin\jdb > SwingSet2 > > java.util.ServiceConfigurationError: com.sun.jdi.connect.Connector: > Provider sun.jvm.hotspot.jdi.SACoreAttachingConnector not found > java.util.ServiceConfigurationError: com.sun.jdi.connect.Connector: > Provider sun.jvm.hotspot.jdi.SADebugServerAttachingConnector not found > java.util.ServiceConfigurationError: com.sun.jdi.connect.Connector: > Provider sun.jvm.hotspot.jdi.SAPIDAttachingConnector not found > Initializing jdb ... > >> stop at sun.awt.windows.accessibility.AccessibleContextMirror:584 >> > Deferring breakpoint > sun.awt.windows.accessibility.AccessibleContextMirror:584. > It will be set after the class is loaded. > >> run >> > run SwingSet2 > Set uncaught java.lang.Throwable > Set deferred uncaught java.lang.Throwable > > VM Started: > > wins.length = 1 > > Set deferred breakpoint > sun.awt.windows.accessibility.AccessibleContextMirror:584 > > Breakpoint hit: "thread=AWT-EventQueue-0", > sun.awt.windows.accessibility.AccessibleContextMirror.<init>(), line=584 > bci=765 > > AWT-EventQueue-0[1] catch java.lang.NoClassDefFoundError > Deferring all java.lang.NoClassDefFoundError. > It will be set after the class is loaded. > AWT-EventQueue-0[1] step > >> Set deferred all java.lang.NoClassDefFoundError >> > > Exception occurred: java.lang.NoClassDefFoundError (to be caught at: > com.sun.java.accessibility.util.EventQueueMonitor.addTopLevelWindow(), > line=279 bci=119)"thread=AWT-EventQueue-0", > sun.awt.windows.accessibility.AccessibleContextMirror.<init>(), line=584 > bci=766 > > AWT-EventQueue-0[1] threads > Group system: > (java.lang.ref.Reference$ReferenceHandler)0x122 > Reference Handler cond. waiting > (java.lang.ref.Finalizer$FinalizerThread)0x121 > Finalizer cond. waiting > (java.lang.Thread)0x120 > Signal Dispatcher running > (java.lang.Thread)0x11f > Attach Listener running > (java.lang.Thread)0x252 > Java2D Disposer cond. waiting > (java.lang.Thread)0x59e > TimerQueue cond. waiting > Group main: > (java.lang.Thread)0x255 > AWT-Shutdown cond. waiting > (java.lang.Thread)0x256 > AWT-Windows running > (com.sun.java.accessibility.util.ComponentEvtDispatchThread)0x26a > EventQueueMonitor-ComponentEvtDispatch cond. waiting > (java.awt.EventDispatchThread)0x3bc > AWT-EventQueue-0 running > (SwingSet2$DemoLoadThread)0x691 > Thread-1 running > (java.lang.Thread)0x692 > DestroyJavaVM running > > === end log of debug session === > > === code for addTopLevelWindow === > > static boolean addTopLevelWindow(Component c) { > Container parent; > > if (c == null) { > return false; > } > > if (!(c instanceof Window)) { > return addTopLevelWindow(c.getParent()); > } > > if ((c instanceof Dialog) || (c instanceof Window)) { > parent = (Container) c; > } else { > parent = c.getParent(); > if (parent != null) { > return addTopLevelWindow(parent); > } > } > > if (parent == null) { > parent = (Container) c; > } > > // Because this method is static, do not make it synchronized > because > // it can lock the whole class. Instead, just lock what needs to be > // locked. > // > synchronized (topLevelWindows) { > if ((parent != null) && !topLevelWindows.contains(parent)) { > topLevelWindows.addElement(parent); > if (topLevelWindowListener != null) { > > topLevelWindowListener.topLevelWindowCreated((Window) parent); > } > return true; > } else { > return false; > } > } <----- this is line 279 (if I have the correct source file) > } > > === end of code for addTopLevelWindow === > > David Holmes wrote: > >> You add it in conjunction with the -XX:+TraceClassLoading. >> >> David >> >> Pete Brunet said the following on 08/03/10 10:15: >> >>> Hi David, I didn't get any output at all from that one - though it >>> appears to be a valid parameter as it didn't result in an error >>> message. -Pete >>> >>> David Holmes wrote: >>> >>>> Peter, >>>> >>>> Try adding -XX:+Verbose to get extra info >>>> >>>> David >>>> >>>> Pete Brunet said the following on 08/03/10 02:57: >>>> >>>>> Thanks David, Those options tell me which classes were succesfully >>>>> loaded but not what classes the class loader was trying to load >>>>> when the >>>>> class loader was attempting to load SwingEventMonitor. Is there a way >>>>> to get a deeper dump while a particular class is being loaded? -Pete >>>>> >>>>> David Holmes wrote: >>>>> >>>>>> Try -verbose:class or -XX:+TraceClassLoading >>>>>> >>>>>> HTH >>>>>> >>>>>> David Holmes >>>>>> >>>>>> Pete Brunet said the following on 07/31/10 07:53: >>>>>> >>>>>>> This blog post has been helpful to at least start the investigation: >>>>>>> http://www.jroller.com/sjivan/entry/difference_between_classnotfoundexception_and_noclassdeffounderror >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> However, I haven't found anything yet similar to the cases >>>>>>> discussed in >>>>>>> the blog entry. Since SwingEventMonitor was last updated for 1.4 >>>>>>> I do >>>>>>> see the use of Class and ListModel instead of Class<T> and >>>>>>> ListModel<T> >>>>>>> but it seems like this would not cause a NoClassDefFoundError. >>>>>>> >>>>>>> Other than visual inspection (which I've done) is there a technique >>>>>>> for >>>>>>> determining what classes the class loader is attempting to load as >>>>>>> SwingEventMonitor is being loaded? >>>>>>> >>>>>>> Thanks, Pete >>>>>>> >>>>>>> Pete Brunet wrote: >>>>>>> >>>>>>>> What is the correct way to fix this? >>>>>>>> >>>>>>>> Exception in thread "AWT-EventQueue-0" >>>>>>>> java.lang.NoClassDefFoundError: >>>>>>>> com/sun/java/accessibility/util/SwingEventMonitor >>>>>>>> at >>>>>>>> sun.awt.windows.accessibility.AccessibleContextMirror.<init>(AccessibleContextMirror.java:583) >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> This class lives in jaccess-1_4.jar which I copy to lib\ext and is >>>>>>>> documented here: >>>>>>>> http://download.oracle.com/docs/cd/E17802_01/j2se/javase/technologies/accessibility/docs/jaccess-1.3/doc/api/com/sun/java/accessibility/util/package-summary.html >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> Since (as far as I know) this class isn't part of the OpenJDK I >>>>>>>> expected >>>>>>>> javac to fail but it didn't (at least as far as the log shows): >>>>>>>> >>>>>>>> ... >>>>>>>> # Java sources to be compiled: (listed in file >>>>>>>> c:/OPF6CE~1/jdk7/build/WINDOW~2/tmp/sun/sun.awt/awt/.classes.list) >>>>>>>> ../../../src/windows/classes/sun/awt/windows/Accessibility/AccessibleContextMirror.java >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> # Running javac: >>>>>>>> c:/OPF6CE~1/jdk7/build/WINDOW~2/J2SDK-~1/bin/javac >>>>>>>> -J-XX:ThreadStackSize=768 -J-XX:-PrintVMOptions >>>>>>>> -J-XX:+UnlockDiagnosticVMOptions -J-XX:-LogVMOutput -J-client >>>>>>>> -J-Xmx395m >>>>>>>> -J-Xms128m -J-XX:PermSize=32m -J-XX:MaxPermSize=160m -source 7 >>>>>>>> -target 7 >>>>>>>> -encoding ascii >>>>>>>> -Xbootclasspath:c:/OPF6CE~1/jdk7/build/WINDOW~2/classes >>>>>>>> -sourcepath >>>>>>>> c:/OPF6CE~1/jdk7/build/WINDOW~2/gensrc;../../../src/windows/classes;../../../src/share/classes >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -d c:/OPF6CE~1/jdk7/build/WINDOW~2/classes >>>>>>>> @c:/OPF6CE~1/jdk7/build/WINDOW~2/tmp/sun/sun.awt/awt/.classes.list.filtered >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> /usr/bin/mkdir -p >>>>>>>> c:/OPF6CE~1/jdk7/build/WINDOW~2/tmp/sun/sun.awt/awt/obj >>>>>>>> ... >>>>>>>> >>>>>>>> The source for SwingEventMonitor isn't in any of the three >>>>>>>> directories >>>>>>>> in the -sourcepath. >>>>>>>> >>>>>>>> What files should I provide and where should I put them, both for >>>>>>>> compile time and run time? >>>>>>>> >>>>>>>> Thanks, Pete >>>>>>>> >>>>>>>>