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