Ubuntu – Cannot execute Java program: UnsupportedClassVersionError

java

I have installed JDK 6, but I can't execute a Java program.

For example, I have made test.java. I compile it with javac tes.java and there's no error when I compile it, but when I want to execute that program it always displays an error. I execute the Java program with java tes.

Exception in thread "main" java.lang.UnsupportedClassVersionError: tes : Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: tes. Program will exit.

My javac version is 1.7.0, my java version is 1.6.0.

Here is my tes.java code:

class tes{

    public static void main(String[]args){
        System.out.println("hello");    
    }   

}

Best Answer

It looks like you've compiled the Java source with a newer version of Java (7) which cannot be executed by the older Java runtime (6). If you don't need/want Java 7, uninstall the openjdk-7-jdk package and install openjdk-6-jdk instead:

sudo apt-get remove openjdk-7-jdk
sudo apt-get install openjdk-6-jdk

The alternative is using the direct paths to the specific versions of the compiler or runtime:

Running the Java 7 runtime

It's possible that Java 6 is still the default (compatibility with older programs?). To force the use of the Java 7 runtime, use the direct path to it:

/usr/lib/jvm/java-7-openjdk-amd64/bin/java tes

(replace amd64 by i386 for the 32-bit version of Java)

Running the Java compiler version 6

If you want to have code compiled for Java version 6, use the full path to the Java 6 compiler:

/usr/lib/jvm/java-6-openjdk/bin/javac tes.java

Alternatives

Like I've said before, if you don't like version 7 or 6, uninstall it (openjdk-7-jdk and openjdk-7-jre for version 7, openjdk-6-jdk and openjdk-6-jre for version 6). It's possible to have both versions installed. Use the alternatives system to configure the default one. Run the below commands to configure the runtime and compiler. It'll provide you a choice for the default.

sudo update-alternatives --config java
sudo update-alternatives --config javac
Related Question