2011-08-09 10 views
1

我想在我的AIX服務器上運行一個java程序。我寫了類路徑java.lang.NoClassDefFoundError:從AIX運行時出現javax.mail.Address錯誤

/usr/java6/bin/javac -classpath :.:/usr/jdk/commons-net-3.0.1.jar:/usr/jdk/classes12.jar:/usr/jdk/mysql-connector-java-5.1.17-bin.jar:/usr/jdk/jtds-1.2.5.jar:/urs/jdk/mail.jar:/usr/jdk/joda-time-1.6.2.jar:/usr/jdk/commons-codec-1.4.jar:/usr/jdk/commons-logging-1.1.1.jar:/usr/jdk/httpclient-4.1.1.jar:/usr/jdk/httpclient-cache-4.1.1.jar:/usr/jdk/httpcore-4.1.jar:/usr/jdk/httpmime-4.1.1.jar:/usr/jdk/mailapi.jar:/usr/jdk/pop3.jar:/usr/jdk/smtp.jar:/usr/jdk/dsn.jar:/usr/jdk/imap.jar -d . *.java 

這似乎編譯正確。然後,當我運行程序

java daily_transmission 

我得到的錯誤java.lang.NoClassDefFoundError:javax.mail.Address。所有在Eclipse中工作之前的.jar文件都位於/ usr/jdk文件中。

回答

3

一個NoClassDefFoundError意味着(quoting the relevant JavaDoc)

Thrown if the Java Virtual Machine or a ClassLoader instance tries to load in the definition of a class (as part of a normal method call or as part of creating a new instance using the new expression) and no definition of the class could be found.

The searched-for class definition existed when the currently executing class was compiled, but the definition can no longer be found.

兩件事情來檢查:

  1. 首先,你似乎在你的classpath中有一個錯字(儘管它不能一直當你編譯代碼時,或者它不會編譯成功,所以這顯然不是你所看到的異常的根本原因。):

    /urs/jdk/mail.jar 
    

    應該

    /usr/jdk/mail.jar 
    
  2. 確保您還使用-classpath選項傳遞classpath以java以及爲javac在運行時拿起這些.jar文件:

    java -classpath :.:/usr/jdk/commons-net-3.0.1.jar:/usr/jdk/classes12.jar:/usr/jdk/mysql-connector-java-5.1.17-bin.jar:/usr/jdk/jtds-1.2.5.jar:/urs/jdk/mail.jar:/usr/jdk/joda-time-1.6.2.jar:/usr/jdk/commons-codec-1.4.jar:/usr/jdk/commons-logging-1.1.1.jar:/usr/jdk/httpclient-4.1.1.jar:/usr/jdk/httpclient-cache-4.1.1.jar:/usr/jdk/httpcore-4.1.jar:/usr/jdk/httpmime-4.1.1.jar:/usr/jdk/mailapi.jar:/usr/jdk/pop3.jar:/usr/jdk/smtp.jar:/usr/jdk/dsn.jar:/usr/jdk/imap.jar daily_transmission 
    
+0

啊,謝謝,修正了錯字,但是我仍然得到相同的錯誤。 – Mike

+0

您是否將類路徑傳遞給java以及javac?更新了答案。 – razlebe

-1

NoClassDefFoundError表示ClassLoader能夠找到該類,但無法加載。這通常發生在違規類中的某個靜態字段無法初始化時。所以我相信你的類路徑可能是正確的;但該類中的某些靜態字段無法正確設置。

+0

NoClassDefFound表示類定義[無法找到](http://download.oracle.com/javase/6/docs/api/java/lang/NoClassDefFoundError.html)。 – razlebe

+0

我什麼時候說過可以找到類定義?我剛纔說過.class文件在類路徑中可用。 –

+0

當你說* NoClassDefFoundError意味着ClassLoader能夠找到類*。 JavaDoc與此相矛盾。 – razlebe