我现在有一个.java文件设置是这样的:单编译java文件有两个班分为两个.class文件
package com.ds;
class c{...}
public class Main{...}
当我编译文件Main.java,它导致单。类文件是Main.class。
当我尝试使用java com.ds.Main
运行.class时,它不起作用!它说它无法找到或加载课程。
当我尝试用它运行java Main
运行的.class,但我得到一个错误,像这样:
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文件。
这个问题似乎是题外话,因为它是关于将是兴趣不大,未来民众的当务之急。 –
它是错字还是真的,你的包是'com.ds',而'Main'类是在'com/DatingService'里面?无论如何,我不能重现你的错误。如果我在'MyPublicClass.java'文件中有两个类(一个公共),那么如果使用'javac MyPublicClass.java'编译,则会得到两个'class'文件。 – Pshemo
真正的包名是com.DatingService,我简单地缩短了它的例子。它们都在同一个.java文件中的相同包中。他们编译得很好,但我无法运行它。有没有特殊的方式来运行这样的事情? java com.DatingService.Main不工作,因为我上面说过 – AaronDancer