新Java开发人员遇到的一个常见问题是,他们的程序无法运行,并显示错误消息:无法找到或加载主类。。。

这意味着什么,是什么导致的,你应该如何解决?


当前回答

如果使用Maven构建JAR文件,请确保在pom.xml文件中指定主类:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>class name us.com.test.abc.MyMainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

其他回答

如果您的情况与我的情况特别相似,这可能会对您有所帮助:作为初学者,我在尝试运行Java程序时也遇到了这个问题。

我是这样编译的:

javac HelloWorld.java

我也尝试使用相同的扩展名运行:

java Helloworld.java

当我删除.java并重写类似javaHelloWorld的命令时,程序运行得很好。:)

这基本上意味着没有静态main(String[]args)方法。它应该自动解决。如果没有,那么当程序被制作(它没有主方法)或程序被打包(清单信息不正确)时,就会出现问题

这是可行的

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

这行不通

public class Hello {
    public Hello() {
        System.out.println("Hello");
    }
}

我在做mvn eclipse后遇到了这个错误:eclipse。这有点搞乱了我的.classpath文件。

我不得不将.classpath中的行从

<classpathentry kind="src" path="src/main/java" including="**/*.java"/>
<classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>

to

<classpathentry kind="src" path="src/main/java" output="target/classes" />
<classpathentry kind="src" path="src/main/resources" excluding="**"  output="target/classes" />

排除以下文件解决了问题。

META-INF/*.SF

META-INF/*.DSA

META-INF/*.RSA

在build.gradle中添加了以下代码

jar {
    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
    {
        exclude "META-INF/*.SF"
        exclude "META-INF/*.DSA"
        exclude "META-INF/*.RSA"
    }
    manifest {
        attributes(
                'Main-Class': 'mainclass'
        )
    }
}

在搜索了两天后,我找到了这个解决方案,并成功了。这很奇怪,但它对我有用。

package javaapplication3;
public class JavaApplication3 {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    // TODO code application logic here
    System.out.println("Hello");
}

}

这是我要运行的程序,位于C:\Java Projects\JavaApplication3\src\JavaApplication3

现在在此位置打开cmd并使用此命令编译程序

javac JavaApplication3.java

编译完成后,向下导航一个目录,即C:\Java Projects\JavaApplication3\src

现在运行以下命令以执行程序

java javaapplication3.JavaApplication3