NoClassDefFoundError: com/sun/java/accessibility/util/SwingEventMonitor
David Holmes
David.Holmes at oracle.com
Wed Aug 4 04:57:13 UTC 2010
Peter,
This kind of problem is why the ContextClassLoader was introduced.
Anytime you have a SPI where the core libs needs to find a (potentially)
externally defined concrete implementation, the bootstrap loader can't
find it, so the context loader has to be set and used - generally to
jump back down to the application class loader.
Not sure where the fault lies as I don't have this code locally.
David Holmes
Pete Brunet said the following on 08/04/10 14:12:
> 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
>>>>>>>>>
>>>>>>>>>
More information about the build-dev
mailing list