Search code examples
javamultithreadingjvmruntime-error

NoClassDefFoundError getting this error at runtime?


Error NoClassDefFoundError:

Exception in thread "main" java.lang.NoClassDefFoundError: Mythread (wrong name: MyThread)
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1010)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:855)
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:753)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:676)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:634)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519)
    at multirunable.main(multirunable.java:15)

Process finished with exit code 1

Code:

class MyThread implements Runnable {
    @Override
    public void run() {
        System.out.println("I am a thread 1 not a thread 2");
    }
}
class MyThread2 implements Runnable {
    @Override
    public void run() {
        System.out.println("I am a thread 2 not a thread 1");
    }
}
public class multirunable {
    public static void main(String[] args) {
        MyThread t1 = new MyThread();
        Thread w1 = new Thread(t1);
        Mythread2 t2 = new Mythread2();
        Thread w2 = new Thread(t2);
        w1.start();
        w2.start();
    }
}

Solution

  • You wrote in your Main Method Mythread2 but you need to name it MyThread2 because thats the identical name of your Runnable class.