2013-05-02 25 views
0

我試圖從源代碼創建一個JAR文件,但是當我運行它時,我得到的類沒有找到異常 - 它找不到主類,即使我將其定義爲MANIFEST.MF文件。你能發現任何錯誤嗎?ClassNotFoundException在已創建的JAR中顯示清單的問題

我的JAR結構:

META-INF/ 
META-INF/MANIFEST.MF 
main/ 
main/java/ 
main/java/ThreadWatcher.java 
main/java/WatcherObject.java 
main/resources/ 
main/resources/WatcherObjectType.java 
main/resources/TLogger.java 
main/resources/DataProvider.java 
main/resources/WatcherObjectStatus.java 
main/resources/SettingsProvider.java 

主/ JAVA/WatcherObject.java包含的主要方法。

我的MANIFEST.MF:

Manifest-Version: 1.0 
Created-By: 1.6.0_27 (Sun Microsystems Inc.) 
Main-Class: main.java.ThreadWatcher 

當我運行它,我得到:

Exception in thread "main" java.lang.NoClassDefFoundError: main/java/ThreadWatcher 
Caused by: java.lang.ClassNotFoundException: main.java.ThreadWatcher 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
Could not find the main class: main.java.ThreadWatcher. Program will exit. 

感謝您的幫助!

+0

如果WatcherObject包含主方法,爲什麼將ThreadWatcher設置爲主類? – Antimony 2013-05-02 12:45:06

+0

你應該在你的JAR中編譯'.class'文件,而不僅僅是源代碼。 – 2013-05-02 12:51:54

回答

1

問題很可能是你包含java源文件,而不是編譯後的類文件。當你加載一個類時,默認情況下JVM會查找具有該名稱的類文件並嘗試加載它。由於您沒有任何類文件,因此無法加載該類。