简体   繁体   中英

Java jar file not running in Linux terminal

I am trying to run a .jar file in terminal on Linux but gives an error:

[root@localhost dist]# java -jar helloworld.jar
Exception in thread "main" java.lang.ClassFormatError: 
   helloworld.Helloworld (unrecognized class file version)

   at java.lang.VMClassLoader.defineClass(libgcj.so.7rh)
   at java.lang.ClassLoader.defineClass(libgcj.so.7rh)
   at java.security.SecureClassLoader.defineClass(libgcj.so.7rh)
   at java.net.URLClassLoader.findClass(libgcj.so.7rh)
   at gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.7rh)
   at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
   at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
   at gnu.java.lang.MainThread.run(libgcj.so.7rh).

I have checked my version and it is:

[root@localhost /]# java --version
java version "1.4.2"
gij (GNU libgcj) version 4.1.2 20080704 (Red Hat 4.1.2-51)

What is causing this error and how do I fix it?

Try doing the following -

First Step:

sudo update-java-alternatives -l

This to ensure you have JDK6 installed correctly. It should display something like this -

java-6-sun 63 /usr/lib/jvm/java-6-sun

Second Step:

sudo update-java-alternatives -s java-6-sun

This way both javac and java v6 will be used by default.

Update:

Type the following on your terminal -

javac -version

If you get javac 1.6.0_10 or later as the output then you will have to do the following steps. If you dont get the above output, you will have to un-install and re-install java.

Steps to do if version shown is 1.6.0_10 or later

  1. Create symlink-

    ln -s /usr/local/java /usr/local/jdk1.6.0_10

  2. Once that is done, add the following to your .bashrc file

    export JAVA_HOME=/usr/local/jdk1.6.0_10 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib

You get this error if your versions of javac and java are not the same.

Exception in thread "main" java.lang.ClassFormatError: Runner
(unrecognized class file version)

Diagnose the problem this way:

$ which java
/usr/bin/java

$ which javac
/home2/ericlesc/bin/jdk1.8.0_40/bin/javac

Notice how the javac and the java are not from the same directories? Those two need to be from the same place, the same version.

To fix it, I added these to my .bash_profile

export JAVA_HOME=/home2/ericlesc/bin/jdk1.8.0_40
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib

Then the error goes away.

You will need yours to point to where you installed java.

You must have compiled with a newer version of the JDK/JRE than the one you're running the jar with. Check the version of the JDK you're using to compile the project in Netbeans, and then check the JDK/JRE version in the console using

java -version

The error is : "unrecognized class file version" . It means you trying to start jar that was build by incompatible java version.

As I can see, you actually run gcc java. Try to start this jar by original sun/oracle jre

Run the following in your own machine and the actual machine your are trying to deploy:

java -version

If it is different, then you should get the issue.

Note: If you get cannot find command error while running above command, the path variable may not be set correctly. In this case, please go to the dir where jdk/sdk is installed, to bin folder and then run the command.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM