web-dev-qa-db-ja.com

java.lang.UnsupportedClassVersionError

Javaプログラムを実行したときに、このエラーを受け取りました。このエラーが発生する理由を教えてください。

Exception in thread "main" Java.lang.UnsupportedClassVersionError: 
    GenerateInvoice (Unsupported major.minor version 49.0)
        at Java.lang.ClassLoader.defineClass0(Native Method)
        at Java.lang.ClassLoader.defineClass(ClassLoader.Java:539)
        at Java.security.SecureClassLoader.defineClass(SecureClassLoader.Java:123)
        at Java.net.URLClassLoader.defineClass(URLClassLoader.Java:251)
        at Java.net.URLClassLoader.access$100(URLClassLoader.Java:55)
        at Java.net.URLClassLoader$1.run(URLClassLoader.Java:194)
        at Java.security.AccessController.doPrivileged(Native Method)
        at Java.net.URLClassLoader.findClass(URLClassLoader.Java:187)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:289)
        at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:274)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:235)
        at Java.lang.ClassLoader.loadClassInternal(ClassLoader.Java:302)
51
user1614043

このクラスは、実行に使用されたものよりも新しいJDKでコンパイルされました。

最も簡単なのは、プログラムを実行するコンピューターに最新のJREをインストールすることです。最近インストールしたと思われる場合は、Java_HOMEおよびPATH環境変数を確認してください。

バージョン49はJava 1.5です。つまり、クラスはまだ古いJDKを使用して(またはJDKを使用して)コンパイルされました。 JDK 1.4でクラスを実行しようとした可能性があります。本当にもう1つ使用する必要があります(1.6または1.7。 Javaバージョン履歴 を参照)。

89
Denys Séguret

別のオプションは、すべてのクラスを削除して再構築することです。ビルドファイルを持つことは、コンパイル、パッケージ化、展開などのプロセス全体を制御するための理想的なソリューションです。ソース/ターゲットバージョンを指定することもできます

4

ほとんどの場合、コードは後のJDKでコンパイルされ( クロスコンパイルオプション を使用せずに)、以前のJREで実行されています。 JREのアップグレードは1つのソリューションですが、クロスコンパイルオプションを使用して、アプリの最小バージョンとして意図されているJREでコードが実行されるようにすることをお勧めします。

1
Andrew Thompson