V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
linmaoxe2v
V2EX  ›  Java

[求助]关于 cmd 命令运行时发现错误(已加 classpath): 找不到或无法加载主类 Main.class 原因: Java .lang.ClassNotFoundException: Main.class

  •  
  •   linmaoxe2v · 2019-10-01 20:24:01 +08:00 · 4279 次点击
    这是一个创建于 1640 天前的主题,其中的信息可能已经有所发展或是发生改变。

    小弟下了个 java,打算学点皮毛,在 eclipse 编译执行顺利,但突然发现 在 windows cmd 命令下 java 执行一个随便一个超级简单的 class,都不行 classpath 不论是手动环境变量设置,还是 cmd 加参数设置 classpath,都不行,试了绝对路径和相对路径都不行,我要抓了。 java 内容,就简单一句: public class Main { public static void main(String[] args) { System.out.println(1); } }

    然后 cmd 命令在其路径下(该路径下已经 javac 编译出 Main.class 文件了) E:\Users\linmao\eclipse-workspace\hello\src>java -classpath ".;" Main.class 错误: 找不到或无法加载主类 Main.class 原因: java.lang.ClassNotFoundException: Main.class

    绝对路径和相对路径都试过了

    有没有大神,告诉怎么 debug,我不知道这个怎么 debug,求助,困扰了很久了,脑子都秀逗了

    15 条回复    2019-10-02 17:38:35 +08:00
    avk458
        1
    avk458  
       2019-10-01 20:38:11 +08:00
    编译过了?
    linmaoxe2v
        2
    linmaoxe2v  
    OP
       2019-10-01 20:42:08 +08:00
    @avk458 在 eclipse 编译通过并执行成功了,然后我是在 cmd 里切到这个路径下,cmd 命令 java 运行这个 class 文件,发现不行。关键我还带了 classpath,也不行。我也觉得想不通
    QiuSe
        3
    QiuSe  
       2019-10-01 20:54:35 +08:00
    你可能带 package 了,编译的时候要 -d . XXX.java;
    linmaoxe2v
        4
    linmaoxe2v  
    OP
       2019-10-01 22:05:48 +08:00
    @QiuSe 我试了下,还是不行
    java -classpath ".;" Main.class -d Main.java
    错误: 找不到或无法加载主类 Main.class
    原因: java.lang.ClassNotFoundException: Main.class


    你们这种一般都怎么定位 debug 呀?我一点头绪都没
    linmaoxe2v
        5
    linmaoxe2v  
    OP
       2019-10-01 22:09:43 +08:00
    @QiuSe java -classpath "." Main.class -d . Main.java, 也试了,也不行哈
    imzcg
        6
    imzcg  
       2019-10-01 22:16:20 +08:00 via Android   ❤️ 2
    ???谁教你的
    🤔
    javac *.java
    java *
    kokutou
        7
    kokutou  
       2019-10-01 22:25:55 +08:00
    我记得都是要先 javac,然后 java 的啊。。。
    maokabc
        8
    maokabc  
       2019-10-01 22:36:15 +08:00 via Android   ❤️ 2
    明显的,运行不要加.class 后缀
    linmaoxe2v
        9
    linmaoxe2v  
    OP
       2019-10-01 23:07:57 +08:00
    @imzcg 我描述清楚,我拿的是 eclipse 编译成功也执行 class 成功的 class 文件。也就是 eclipse 上编译成功后并执行的 Main.class 文件,手动去执行的时候,发现不行
    linmaoxe2v
        10
    linmaoxe2v  
    OP
       2019-10-01 23:08:27 +08:00
    @kokutou 我没描述清楚,我拿的是 eclipse 编译成功也执行 class 成功的 class 文件。也就是 eclipse 上编译成功后并执行的 Main.class 文件,手动 cmd 去执行的时候,发现不行
    linmaoxe2v
        11
    linmaoxe2v  
    OP
       2019-10-01 23:10:43 +08:00
    @maokabc 你说的对,是我没理解透 java,去掉后缀 class 后,就成功了,让你见笑了哈
    aLazarus
        12
    aLazarus  
       2019-10-01 23:15:15 +08:00 via Android   ❤️ 1
    java 命令是根据.这个符号来表示目录结构的
    所以如果你用 java main.class,他会去寻找一个叫做 java 的 package 中叫做 class 的文件
    linmaoxe2v
        13
    linmaoxe2v  
    OP
       2019-10-02 00:22:13 +08:00
    @aLazarus 嗯嗯,领教了哈,之前没理解哈,以为就是像 Python *.py 这种,让大家见笑了哈
    Aruforce
        14
    Aruforce  
       2019-10-02 14:35:46 +08:00 via Android
    jar 包 META-INF 文件夹下有个 M 开头的文件 里面需要指定 main class 你可以看下 jar 规范… 楼上几个真逗…
    aLazarus
        15
    aLazarus  
       2019-10-02 17:38:35 +08:00
    @Aruforce #14 manifest.mf
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5323 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 07:14 · PVG 15:14 · LAX 00:14 · JFK 03:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.