2013-10-18 53 views
1

我正在使用jackcess來訪問我的訪問數據庫。但我有以下例外Jackcess「NoClassDefFoundError」異常

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/builder/CompareToBuilder 
    at com.healthmarketscience.jackcess.impl.RowIdImpl.compareTo(RowIdImpl.java:113) 
    at com.healthmarketscience.jackcess.impl.IndexData$Entry.compareTo(IndexData.java:1838) 
    at com.healthmarketscience.jackcess.impl.IndexData$Entry.compareTo(IndexData.java:1646) 
    at java.util.Collections.indexedBinarySearch(Collections.java:273) 
    at java.util.Collections.binarySearch(Collections.java:259) 
    at com.healthmarketscience.jackcess.impl.IndexData$DataPage.findEntry(IndexData.java:2368) 
    at com.healthmarketscience.jackcess.impl.IndexData.findEntryPosition(IndexData.java:722) 
    at com.healthmarketscience.jackcess.impl.IndexData.access$3300(IndexData.java:56) 
    at com.healthmarketscience.jackcess.impl.IndexData$EntryCursor.updatePosition(IndexData.java:2133) 
    at com.healthmarketscience.jackcess.impl.IndexData$EntryCursor.restorePosition(IndexData.java:2072) 
    at com.healthmarketscience.jackcess.impl.IndexData$EntryCursor.restorePosition(IndexData.java:2055) 
    at com.healthmarketscience.jackcess.impl.IndexData$EntryCursor.beforeEntry(IndexData.java:2017) 
    at com.healthmarketscience.jackcess.impl.IndexCursorImpl.findPotentialRow(IndexCursorImpl.java:368) 
    at com.healthmarketscience.jackcess.impl.IndexCursorImpl.findFirstRowByEntryImpl(IndexCursorImpl.java:262) 
    at com.healthmarketscience.jackcess.impl.IndexCursorImpl.findFirstRowByEntry(IndexCursorImpl.java:135) 
    at com.healthmarketscience.jackcess.impl.DatabaseImpl$DefaultTableFinder.findRow(DatabaseImpl.java:1890) 
    at com.healthmarketscience.jackcess.impl.DatabaseImpl$TableFinder.findObjectId(DatabaseImpl.java:1799) 
    at com.healthmarketscience.jackcess.impl.DatabaseImpl.readSystemCatalog(DatabaseImpl.java:804) 
    at com.healthmarketscience.jackcess.impl.DatabaseImpl.<init>(DatabaseImpl.java:513) 
    at com.healthmarketscience.jackcess.impl.DatabaseImpl.open(DatabaseImpl.java:386) 
    at com.healthmarketscience.jackcess.DatabaseBuilder.open(DatabaseBuilder.java:170) 
    at com.healthmarketscience.jackcess.DatabaseBuilder.open(DatabaseBuilder.java:193) 
    at ass.Access.main(Access.java:25) 
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.builder.CompareToBuilder 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    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) 
    ... 23 more 

我已經使用jdbc,但它也不工作。如何解決我的問題?

回答

2

Jackcess在Jakarta Commons Lang上有dependency。您需要確保commons lang和其他依賴項位於您的類路徑中。

+0

迪宏我已經添加了通用日誌,commons編解碼器,poi,junit,log4j。它不工作。我錯過了什麼? – Sarah

+0

commons lang,版本2.0可從http://repo1.maven.org/maven2/commons-lang/commons-lang/2.0/commons-lang-2.0.jar下載。 –

+0

我已經添加了commons lang文件,但現在我已經得到了這個警告log4j:警告沒有appender可以找到記錄器(com.healthmarketscience.jackcess.impl.DatabaseImpl)。 log4j:WARN請正確初始化log4j系統。我能做什麼? – Sarah

4

這裏就是我得到了Jackcess工作,開始了新的NetBeans 7.4對Windows 8的安裝:

我下載通過最新Jackcess JAR文件中的「尋找最新版本?」鏈接files頁面。我的文件夾中保存它

C:\用戶\公用\的Java \

由於Project Dependencies頁Jackcess上市,我下載了兩個必要的依賴壓縮的二進制文件:commons-lang版本2.x和commons-logging v1.x.我將ZIP文件解壓到上面的文件夾中,所以它現在包含兩個子文件夾:

C:\ Users \ Public \ Java \ commons-lang-2.6 \
C:\ Users \ Public \ Java \ commons- logging-1.1.3 \

我啓動了NetBeans並創建了一個名爲「myJackcessTest」的新項目(用於Java應用程序)。我擴大了項目在樹視圖中,右鍵點擊「庫」,選擇「添加JAR /文件夾...」,並增加了三個JAR文件:

Libraries.png

這項工作完成,我創建我的小測試應用程序...

package myjackcesstest; 

import com.healthmarketscience.jackcess.*; 
import java.io.File; 
import java.io.IOException; 

public class MyJackcessTest { 

    public static void main(String[] args) { 
     try { 
      Table table = DatabaseBuilder.open(new File("C:\\Users\\Public\\Database1.accdb")).getTable("Clients"); 
      System.out.println(String.format("table contains %d row(s)", table.getRowCount())); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

...當我打F6它優良跑:

run: 
table contains 1 row(s) 
BUILD SUCCESSFUL (total time: 0 seconds) 
相關問題