找不到主类:Main,应用程序将退出

时间:2012-08-02 18:09:22

标签: java

我有Main.java,看起来像这样:

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) throws UnsupportedEncodingException {
        // TODO Auto-generated method stub
        System.out.println("here!");
    }

}

我用以下代码编译它:

javac Main.java

尝试使用

运行它
java Main

它随着以下例外而死:

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

java -version是:

java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.3) (6b24-1.11.3-1ubuntu0.12.04.1)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)

我在Ubuntu服务器上运行它。

我做错了什么?

更新

javac -version

javac 1.7.0_03

which java

/usr/bin/java

which javac

/usr/bin/javac

3 个答案:

答案 0 :(得分:5)

您正在尝试使用Java 6 运行,但看起来您正在使用Java 7 编译

运行

javac -version

要检查......并假设它显示了Java 7,你需要找出为什么这两者是不同的。

运行

$ which java
$ which javac

可能帮助......这些信息肯定有助于我们为您提供帮助。

答案 1 :(得分:3)

java.lang.UnsupportedClassVersionError: Main : Unsupported major.minor version 51.0

似乎你在classpath中编译的jdk与你在运行时的那个不同。确保两个类路径中都有相同的jdk。

答案 2 :(得分:0)

我遇到了与Ubuntu完全相同的问题。我的问题是需要完全删除openjdk-6-jre-lib中的一些原始库。在您的synaptic管理器中删除该软件包以及与openjdk 6或jre版本6相关的任何内容。如果您使用的是Ubuntu 12,则需要在删除它时安装synaptic。我不喜欢使用软件管理器。确保安装了打开的jdk版本7。

的openjdk -7- JRE-LIB

请记住,这是使用Oracle Java 7安装的替代方法。 open意味着开源版本。

如果在Ubuntu上安装openjdk 7,则应自动设置类路径。我没有必要调整它。如果你想调整它,你可以在〜/ .bash_profile中设置它。但请记住,您将拥有有限的区域(需要在您的〜/层次结构下),您可以在命令行中编译。你需要使用“drew:source .bash_profile”重新加载。我调整了/ etc / environment中的classpath,它搞砸了关于ubuntu 12上的openjdk 6的synaptic包管理器。无论如何,当classpath被改变时,我无法用synaptic卸载openjdk 6。