Re: I'm annoyed



Mike Schilling wrote:
I have some Java code that analyzes Java code using reflection. It loads classes using ClassLoader.loadClass() (catching the ClassNotFoundException if they're missing) and then uses reflection to gather data about them. I started up what should have been a long run before I left work, and later this evening remoted in to find that it had died almost immediately.

Why? It appears that trying to load class AaaBbb but finding class Aaabbb whose name differs only in case (quite easy to do on a case-insensitive file system), instead of throwing a ClassNotFoundException, throws a NoClassDefFoundError (that's right, Error.) This was not caught, and caused the program to exit. This is not documented behavior. It's not hard to fix (catch Throwable instead of the expected ClassNotFoundException), but the result is that something which should have completd overnight might or might not be done by tomorrow morning.

NoClassDefFoundError is the standard response by the JVM when the desired class, in this case AaaBbb, is not present at run time.

The problem is that the reflective code didn't catch that the class was missing. So it passed on to the JVM the request to go ahead and load the class. That's why it was an Error, not an Exception. It's an Error when the situation is so tangled that the JVM cannot fix it. Thus you experienced the correct behavior.

In this case I infer that you were running under Windows, and the OS lied to the JVM about the availability of the class, precluding the Exception and forcing the Error.

--
Lew
.



Relevant Pages

  • Re: Im annoyed
    ... ClassNotFoundException if they're missing) and then uses reflection ... It appears that trying to load class AaaBbb but finding class ... NoClassDefFoundError is the standard response by the JVM when the ...
    (comp.lang.java.programmer)
  • Re: Im annoyed
    ... ClassNotFoundException if they're missing) and then uses reflection ... It appears that trying to load class AaaBbb but finding class ... ClassNotFoundException, throws a NoClassDefFoundError (that's right, ... NoClassDefFoundError is the standard response by the JVM when the ...
    (comp.lang.java.programmer)
  • Re: Invoke Java from Excel
    ... I'd never done it with Excel but with several other programs: ... First you must reach "native" code in your program (writing vb, ... load your main class, ... It seems to me that there is an activeX that launch the JVM, ...
    (comp.lang.java.programmer)
  • Re: java custom build
    ... Load the JVM and keep it loaded and run ... I am not loading the jvm for each script execution.. ... But the application startup time it too long. ...
    (comp.lang.java.programmer)
  • Re: A fundamental question about bytecode and nativecode
    ... fast 'command line' based tools. ... Who would want to load a JVM (even a minimal or core one) just to do a directory listing, ...
    (comp.lang.java.programmer)