NoClassDefFoundError: com/sun/java/accessibility/util/SwingEventMonitor

Pete Brunet peter.brunet at oracle.com
Tue Aug 3 05:14:13 UTC 2010


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