Java Runtime errors

https://java.com

Core environment and runtime library

Documented:

Top patterns

  1. A class that is not available on the classpath or the class loader is closed

    java.lang.ClassNotFoundException is one of the most frequent exceptions in Java. It is a runtime error, however, it does not signal a bug in your application logic, but rather an issue with the environment (build system, dependency management, runtime environment, etc.)

    According to the javadoc, it "is thrown when an application tries to load in a class through its string name". There are several different situations leading to this error and you have to examine the stack trace thoroughly to be able to decide how to solve this problem.

    The first thing to check is whether you get this checked exception directly, or wrapped in a java.class.NoClassDefFoundException. The latter happens when the class not found was resolved during compilation time, but not found during runtime, which is a bit different than the first case and it needs special care. If this is what happened to you, then you should read that article (coming soon).

    Next we ask what is the class that was not found. Fortunately, in most cases, you can see it in the message of the exception. If this class was specified by you (either directly in the code, or via a configuration file), double check that you did not misspell it. Some practical advices:

    • Make sure you use the fully qualified name of the class (e.g. org.postgresql.ds.PGSimpleDataSource)
    • When loading a nested class, make sure you use the proper name (joined with a $ sign, e.g. test.MyClass$InnerClass).
    • If you are unsure, you can check the name of the class in the code by using MyClass.class.getName()

    If none of the above helped then you have an issue with your classpath, which requires some time and experience to resolve. When the java.lang.ClassNotFoundException is related to a third party library, you might want to ask for help in their support forums. However, if you want to debug it yourself, let me equip you with some theoretical and practical knowledge.

    • To understand what is class loading in Java, start with this StackOverflow question or the Java Language Specification §12.2. Roughly speaking, the classes that your application use are located in jar files on the file system. The classpath is a list of jar files which are searched through when your application loads a class. The java.lang.ClassNotFoundException means that the class you wanted to load is not present in any of the jar files on the classpath.
    • The configuration of your classpath depends on your runtime environment (i.e. do you run the application from console, from IDE, web container, etc), you can find more information on the specific forums. However, if you can use breakpoints to stop at specific points in your application, stop at the first line of java.net.URLClassLoader.findClass and check the value of the field ucp.
    • You should have an idea on which jar file contains the class that could not be loaded, and look for that jar in the classpath. If it is not there, you have to add that jar to the classpath (precise details depend on the runtime environment).
    • If you find the jar you suspect to contain your class, check if it is true by opening the jar file (they are simple zip files actually) and look for the class definition in the directory structure in it (the directory structure must be identical to the package structure of the java code). At this point you should realize that the class is not present, otherwise the problem would have been found previously during debugging.
    • There are two reasons for class not being present in the jar: the first is that you have an incorrect version of the library you wanted to use. To fix this, you have to tweak your build system (maven, ant, sbt, gradle etc) by making sure that you configured the right version of the library as the dependency, and that you don’t have conflicting library versions. To find out how to do this, look for help on the forums of that build system.
    • The other reason of the class not being present is that it’s a bug in that library. If this is a third-party library, you might want to check the support forum and the release notes. If this library was written by you, then try to rebuild this library and check if the class you look for is present in the resulting jar file.
  2. ClassLoader.loadClass() has thrown a ClassNotFoundException
    No solution
  3. The class could not be found

    This error pattern looks similar to error pattern 88439.

    However, in this case, we are sure that this happens when sun.misc.URLClassPath.getResource(String name, boolean check) returns null. Practically every exception that happens in getResource is handled by returning null.


DescriptionException TypeEntry MethodWeb pages
NullPointerExceptionObjectInputStream.readObject5
NullPointerExceptionObjectInputStream.readObject5
NullPointerExceptionObjectInputStream.readObject3
NullPointerExceptionObjectInputStream.readObject3
NullPointerExceptionObjectInputStream.readObject2
NullPointerExceptionObjectInputStream.readObject2
NullPointerExceptionObjectInputStream.readObject2
NullPointerExceptionObjectInputStream.readObject2
NullPointerExceptionObjectInputStream.readObject2
NullPointerExceptionObjectInputStream.readObject2
NullPointerExceptionObjectInputStream.readObject1
Package nameClass namePatterns foundSolution coverageDescription coverage
java.ioObjectInputStream1111
java.ioObjectOutputStream598
java.ioBufferedInputStream280
java.ioBufferedOutputStream236
java.ioFile188
java.ioBufferedReader183
java.ioDataInputStream176
java.ioFilterInputStream150
java.ioFileInputStream125
java.ioFileOutputStream100
java.ioInputStreamReader87
java.ioRandomAccessFile84
java.ioInputStream75
java.ioDataOutputStream74
java.ioObjectStreamClass73
java.ioOutputStreamWriter69
java.ioBufferedWriter62
java.ioPrintStream61
java.ioFilterOutputStream60
java.ioOutputStream59
java.ioPrintWriter48
java.ioObjectInputStream$BlockDataInputStream44
java.ioObjectInputStream$PeekInputStream30
java.ioByteArrayOutputStream28
java.ioFileReader27
java.ioReader26
java.ioWriter24
java.ioObjectOutputStream$BlockDataOutputStream22
java.ioFileWriter21
java.ioUnixFileSystem19
java.ioStringWriter14
java.ioPushbackInputStream13
java.ioObjectStreamClass$211
java.ioFilePermission10
java.ioIOException8
java.ioPipedInputStream7
java.ioPipedOutputStream5
java.ioStringReader4
java.ioByteArrayInputStream3
java.ioBufferedReader$13
java.ioObjectStreamClass$13
java.ioFilterWriter3
java.ioFileDescriptor3
java.ioObjectOutputStream$HandleTable3
java.ioObjectInputStream$HandleTable3
java.ioSequenceInputStream3
java.ioFilePermission$12
java.ioCharArrayWriter2
java.ioStreamCorruptedException1
java.ioConsole1
Package nameClass nameMethod namePatterns foundSolution coverage
java.ioObjectInputStreamreadObject378
java.ioObjectInputStreamreadObject0354
java.ioObjectInputStreamreadClassDesc68
java.ioObjectInputStreamdefaultReadFields68
java.ioObjectInputStreamreadOrdinaryObject30
java.ioObjectInputStreamdefaultReadObject27
java.ioObjectInputStreamresolveClass27
java.ioObjectInputStream<init>25
java.ioObjectInputStreamreadSerialData20
java.ioObjectInputStreamreadStreamHeader16
java.ioObjectInputStreamreadNonProxyDesc12
java.ioObjectInputStreamreadInt7
java.ioObjectInputStreamreadHandle6
java.ioObjectInputStreamreadUTF5
java.ioObjectInputStreamreadByte4
java.ioObjectInputStreamreadEnum4
java.ioObjectInputStreamreadExternalData4
java.ioObjectInputStreaminit4
java.ioObjectInputStreamread3
java.ioObjectInputStreamreadFully3
java.ioObjectInputStreaminputObject3
java.ioObjectInputStreaminputClassDescriptor3
java.ioObjectInputStreamreadUnshared3
java.ioObjectInputStreamreadShort3
java.ioObjectInputStreamreadNonPrimitiveContent2
java.ioObjectInputStreamreadUTFBody2
java.ioObjectInputStreampeekCode2
java.ioObjectInputStreamreadString2
java.ioObjectInputStreamskipCustomData2
java.ioObjectInputStreamreadBoolean2
java.ioObjectInputStreamaccess$3002
java.ioObjectInputStreamreadProxyDesc2
java.ioObjectInputStreaminputClassFields2
java.ioObjectInputStreamreadArray2
java.ioObjectInputStreamreadClassDescriptor1
java.ioObjectInputStreamreadCyclicReference1
java.ioObjectInputStreamreadClass1
java.ioObjectInputStreamhandleReset1
java.ioObjectInputStreamreadFields1
java.ioObjectInputStreamrefill1
java.ioObjectInputStreamcheckReadPrimitiveTypes1
java.ioObjectInputStreamenableResolveObject1
java.ioObjectInputStreamverifyAndInit1
java.ioObjectInputStreamcorruptStream1
java.ioObjectInputStream<clinit>1
java.ioObjectInputStreamreadLong1
java.ioObjectInputStreamavailable1
java.ioObjectInputStreamreadNewClassDesc1
Package nameClass nameMethod nameException TypePatterns foundSolution coverage
java.ioObjectInputStreamreadObjectClassNotFoundException105
java.ioObjectInputStreamreadObjectInvalidClassException58
java.ioObjectInputStreamreadObjectStreamCorruptedException32
java.ioObjectInputStreamreadObjectClassCastException24
java.ioObjectInputStreamreadObjectEOFException24
java.ioObjectInputStreamreadObjectSocketException13
java.ioObjectInputStreamreadObjectNullPointerException11
java.ioObjectInputStreamreadObjectNoClassDefFoundError8
java.ioObjectInputStreamreadObjectSparkException7
java.ioObjectInputStreamreadObjectIOException7
java.ioObjectInputStreamreadObjectOptionalDataException6
java.ioObjectInputStreamreadObjectWriteAbortedException6
java.ioObjectInputStreamreadObjectIllegalStateException6
java.ioObjectInputStreamreadObjectNotSerializableException5
java.ioObjectInputStreamreadObjectjava5
java.ioObjectInputStreamreadObjectUnmarshalException5
java.ioObjectInputStreamreadObjectOutOfMemoryError5
java.ioObjectInputStreamreadObjectNoSuchObjectException3
java.ioObjectInputStreamreadObjectInvalidObjectException3
java.ioObjectInputStreamreadObjectMalformedURLException3
java.ioObjectInputStreamreadObjectAssertionError3
java.ioObjectInputStreamreadObjectArrayStoreException3
java.ioObjectInputStreamreadObjectRuntimeException2
java.ioObjectInputStreamreadObjectFSException2
java.ioObjectInputStreamreadObjectIllegalArgumentException2
java.ioObjectInputStreamreadObjectSocketTimeoutException2
java.ioObjectInputStreamreadObjectUTFDataFormatException2
java.ioObjectInputStreamreadObjectNoSuchMethodError2
java.ioObjectInputStreamreadObjectSecurityException2
java.ioObjectInputStreamreadObjectElementNotFoundException1
java.ioObjectInputStreamreadObjectProjectAreaBean1
java.ioObjectInputStreamreadObjectWriteAbortedException1
java.ioObjectInputStreamreadObjectUnsupportedOperationException1
java.ioObjectInputStreamreadObjectInvocationTargetException1
java.ioObjectInputStreamreadObjectSecretException1
java.ioObjectInputStreamreadObjectUndeclaredThrowableException1
java.ioObjectInputStreamreadObjectSimpleEntity1
java.ioObjectInputStreamreadObjectMARSHAL1
java.ioObjectInputStreamreadObjectActiveOrdersFact1
java.ioObjectInputStreamreadObjectMethodDescriptor1
java.ioObjectInputStreamreadObjectExceptionInInitializerError1
java.ioObjectInputStreamreadObjectFileNotFoundException1
java.ioObjectInputStreamreadObjectIndexOutOfBoundsException1
java.ioObjectInputStreamreadObjectNoSuchMethodException1
java.ioObjectInputStreamreadObjectIncompleteAnnotationException1
java.ioObjectInputStreamreadObjectCompositeTupleProxy1
java.ioObjectInputStreamreadObjectRemoteException1
java.ioObjectInputStreamreadObjectAccessControlException1
java.ioObjectInputStreamreadObjectClassFormatError1
java.ioObjectInputStreamreadObjectBumpBoost$$anon$87$$anon$881