Can't run my program after compiling says unsupported class version error

5.5k Views Asked by At

I am a new user for linux. I just installed jdk1.7.0_02.rpm and tried to compile my program using javac tester.java When i try to run the file by java tester i get these errors

Exception in thread "main" java.lang.UnsupportedClassVersionError: tester : 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: tester. Program will exit.

Then i checked the java -version and it was :

java version "1.6.0_22"
OpenJDK Runtime Environment (IcedTea6 1.10.4) (fedora-61.1.10.4.fc16-i386)
OpenJDK Server VM (build 20.0-b11, mixed mode)

Now how do i change this version ? I even installed jre1.7.0_02 but nothing changed !

This is what is happening :

enter image description here

5

There are 5 best solutions below

7
On BEST ANSWER

Use the cross-compilation options of javac. Specify a -source and -target version and follow the prompts re other options.


Then please tell how?

javac -source 1.6 -target 1.6 -bootclasspath /path/to/1.6/j2se/rt.jar *.java

If you specify source/target, the 1.7 compiler will warn to use the -bootclasspath option, which is important to verify that the classes, methods and attributes referenced in the source are available in the target Jar. Earlier versions of the compiler failed to warn about the bootclasspath.

0
On

With no reason at all, JAVA_HOME in system environment must be set too. Although If you set JAVA_HOME in app properties.

4
On

You need your system to use the JRE 1.7 upon running Java-Programs. In order to accomplish that, make sure that JAVA_HOME is correctly set to the JRE 1.7:

export JAVA_HOME=/path/to/JRE1.7

Also make sure, that your PATH-Variable points to the proper java/bin directory:

export PATH=$PATH:/path/to/JRE1.7/bin

Persisting these environment-variables beyond reboots/logouts depend on the Linux-distro you are using...

EDIT: For clarification: If you are compiling with version 1.7 (to target 1.7 by default), you have to use a >= 1.7 JRE.

So you have 2 options:

  1. Using JRE 1.7 to run the program you compiled with 1.7 (as outlined above)
  2. Creating 1.6 compliant code using the "-target 1.6" cmdline-argument to javac when
    compiling.
0
On

Run in a terminal:

sudo update-alternatives --config java

And choose the preferred version of Java. If you don't see the version you're looking for as an option, look at this site.

3
On

OK, first off, you shouldn't be running Java application builds as root.

Change to a user account with sudo capability, and don't use root privs until you absolutely need them.

It looks like javac has been updated to version 7 but java has not.

What does this return:

javac -version

You should also tell us the current value of your JAVA_HOME environment variable. Like this:

set | grep ^JA