我目前有一个像这样设置的 .java 文件:
package com.ds;
class c{...}
public class Main{...}
当我编译文件 Main.java 时,它会生成一个名为 Main.class 的 .class 文件。
当我尝试使用它运行 .class 时,java com.ds.Main
它不起作用!它说它找不到或加载类。
当我尝试运行 .class 时,java Main
它会运行,但出现如下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: Main (wrong name: com
/DatingService/Main)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:792)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
我以前在尝试找到解决方案时看到过这种情况,但我发现的解决方案都没有适用于我,或者只是不起作用。
在做了更多研究之后,我假设 javac 至少默认不会拆分文件中的类?我知道 Eclipse 和 IntelliJ 等许多 IDE 将类拆分为两个单独的 .class 文件(我可以确认这一点)。那么javac有没有办法做到这一点?我使用 javac 作为 IntelliJ 的编译器,所以必须有一种方法,除非它在编译之前完成。
如果我删除这个包,我可以运行 java Main 并且只编译一个 .class 文件。所以我有点迷茫,有点绝望。我试图完全避免更改我的代码或将类拆分为两个单独的 .java 文件。