我現在有一個.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