java.net errorsJava Runtime
- 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
getResourceis handled by returning
- A class is not available on the classpath or the class loader is closed
java.lang.ClassNotFoundExceptionis 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.
- When loading a nested class, make sure you use the proper name (joined with a
- If you are unsure, you can check the name of the class in the code by using
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.ClassNotFoundExceptionis 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.ClassNotFoundExceptionmeans 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.findClassand check the value of the field
- 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.
- Make sure you use the fully qualified name of the class (e.g.
- Client cannot establish connection with the server
Roughly there are three categories of this problem:
- no network available: Probably your machine's network interface is down. Check if you have internet and your application has permissions to use the network interface
- connection refused: The address you are trying to connect is not listening. Check if you did not misspelled the host or the port. Also verify that the server you are trying to reach is actually running and listening.
- connection timed out: The server took too much time to respond. You either have to increase the timeout limit or speed up the server.
|Description||Exception Type||Entry Method||Web pages|
The class could not be found
A class is not available on the classpath or the class loader is closed
Client cannot establish connection with the server
Unable to read from socket, server disconnected abruptly
Client unable to complete writing request, network issue or server disconnected abruptly
Connection timed out while trying to read from a socket
URL not properly encoded or incorrect URL format
Port already in use
URI parsing failed due to un-encoded url string
AbstractPlainSocketImpl.connect() has thrown an UnknownHostException
SocketOutputStream.socketWrite() has thrown a SocketException
PlainSocketImpl.connect() has thrown an UnknownHostException
Unable to resolve hostname while performing DNS lookup
InetAddress.getAllByName0() has thrown an UnknownHostException
PlainSocketImpl.socketConnect() has thrown a SocketTimeoutException
PlainSocketImpl.socketConnect() has thrown a SocketException
PlainSocketImpl.socketAccept() has thrown a SocketException
PlainSocketImpl.socketConnect() has thrown a NoRouteToHostException
InetAddress.getLocalHost() has thrown an UnknownHostException
URI.create() has thrown an IllegalArgumentException
SocketInputStream.socketRead() has thrown a SocketException
Android DNS unable to lookup host by name
Inet4AddressImpl.lookupAllHostAddr() has thrown an UnknownHostException
PlainDatagramSocketImpl.send() has thrown an IOException
HttpURLConnection.getResponseCode() has thrown an IOException
PlainSocketImpl.read() has thrown a SocketTimeoutException
SocketInputStream.socketRead0() has thrown a WebServiceException
URL.openStream() has thrown an IOException
PlainDatagramSocketImpl.join() has thrown a SocketException
PlainSocketImpl.socketBind() has thrown a SocketException
Socket.createImpl() has thrown a SocketException
PlainDatagramSocketImpl.bind0() has thrown a BindException
URLClassLoader$1.run() has thrown a NoClassDefFoundError
URLEncoder.encode() has thrown a NullPointerException
URLDecoder.decode() has thrown an IllegalArgumentException
PlainSocketImpl.socketAccept() has thrown a SocketTimeoutException
SocketOutputStream.socketWrite() has thrown an IOException
URLClassLoader.defineClass() has thrown a SecurityException
URI.checkPath() has thrown an URISyntaxException
URI$Parser.parse() has thrown a NullPointerException
URI.toURL() has thrown an IllegalArgumentException
InetSocketAddress.<init>() has thrown an IllegalArgumentException
SocketInputStream.socketRead() has thrown an InterruptedIOException
PlainSocketImpl.socketConnect() has thrown a BindException
SocksSocketImpl.connect() has thrown a SocketException
URLClassLoader.findClass() has thrown a ClassNotFoundException
URLClassLoader.findClass() has thrown a Throwable
URLClassLoader$1.run() has thrown a Throwable
URLClassLoader.access$000() has thrown a Throwable
URLClassLoader.defineClass() has thrown a Throwable