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

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


当前回答

我在IntelliJ中创建的演示程序遇到了这个问题。

解决这个问题有两个关键点:

程序的包名终端/cmd提示符的当前工作目录

我的演示程序:

package io.rlx.tij.c2;

public class Ex10 {
    public static void main(String[] args) {
        // do something
    }
}

源代码路径:

../projectRoot/src/main/java/io/rlx/tij/c2/Ex10.java

转到java目录:cd/项目根/src/main/java编译到类:javac/io/rlx/tij/c2/Ex10.java运行程序:java io.rlx.tij.c2.Ex10

如果我在..中运行程序/projectRoot/src/main/java/io/rlx/tij/c2或我在没有包名的情况下运行它,我将收到以下错误:错误:无法找到或加载主类。

其他回答

对于数据库连接,我得到了这个。我刚刚在类路径中添加了以下内容:

export CLASSPATH=<path>/db2jcc4.jar:**./**

我在这里附上了。/最后,这样我的类在加载时也会被识别。

现在只需运行:

java ConnectionExample <args>

它工作得很好。

这是另一个花费了我一点时间的问题:命令行类路径参数的行为与您预期的不同。我在MacOS上直接调用CLI,并且在调用中包含两个jar。

例如,这两个都让工具混淆了主类的名称:

这是因为星号导致它错误地解析参数:

java-cp路径/to/jars/*com.mypackage.Main

这是因为我不知道为什么:

java-cp“*.jar”com.mypackage.Main

这是有效的:

java-cp“path/to/jars/*”com.mypackage.Main

显式列出两个jar也有效:

java-cp路径/to/jars/jar1.jar:路径/to/jar/jar2.jar com.mypackage.Main

解决“无法加载主类错误”

看完所有的答案后,我发现大多数答案都不适合我。所以我做了一些研究,以下是我得到的答案。只有在步骤1不起作用时才尝试此操作。

尝试安装JRE 32或64。如果它不起作用,打开并转到C:\Program Files(x86)\Java或C:\Program Files\Javai.打开jdk文件夹,然后打开bin文件夹。二。复制路径并将其添加到环境变量中。确保用分号;分隔变量;。例如,“C:\Yargato\bin;C:\java\bin;”。如果不这样做,将导致更多错误。iii.转到jre文件夹并打开其bin文件夹。iv.在这里搜索rt.jar文件。我的是:C: \程序文件(x86)\Java\jre1.8.0_73\lib\rt.jar复制并在环境变量下搜索类路径变量并将其粘贴在那里。v.现在重新启动cmd并再次尝试运行。错误将消失。vi.我将发布我的YouTube视频教程的链接。

这件事也发生在我身上。在我的例子中,只有在源代码中存在HttpServlet类时才会发生这种情况(IntelliJ IDEA没有给出编译时错误;servlet包导入得很好,但是在运行时出现了这个主类错误)。

我设法解决了。我进入菜单“文件”→ 项目结构…:

然后到模块:

servlet模块附近有一个提供的作用域。我将其更改为编译:

而且成功了!

这是一个具体的案例:

Windows(通过Windows7测试)不接受类和包名称中的特殊字符(如á)。不过,Linux确实如此。

我在NetBeans中构建.jar并尝试在命令行中运行时发现了这一点。它在NetBeans中运行,但不在命令行上运行。