线程“主”java.lang.NoClassDefFoundError 中的异常:org/apache/commons/lang/builder/CompareToBuilder

Posted

技术标签:

【中文标题】线程“主”java.lang.NoClassDefFoundError 中的异常:org/apache/commons/lang/builder/CompareToBuilder【英文标题】:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/builder/CompareToBuilder 【发布时间】:2018-10-26 15:29:35 【问题描述】:
package myJavaPrograms;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class AccessDBFiles 
    public static void main(String[] args) throws SQLException  
        Connection conn=DriverManager.getConnection(
                "jdbc:ucanaccess://C:\\TESTFILE\\Database11.accdb");
        Statement s = conn.createStatement();
        ResultSet rs = s.executeQuery("SELECT * FROM myTable");
        while (rs.next()) 
            System.out.println(rs.getString(1));
        
    

我在线程主线程中遇到异常作为线程“主”中的异常 java.lang.NoClassDefFoundError: org/apache/commons/lang/builder/CompareToBuilder

【问题讨论】:

似乎找不到给定的课程。实际上它应该在commons lang中。所以,我建议重建项目或更改公共语言和日志库的版本 【参考方案1】:

UCanAccess 使用 Jackcess,而 Jackcess 使用 commons-lang (v2.x),而不是 commons-lang3。 UCanAccess 所需的所有依赖项都包含在 UCanAccess 分发包(.bin.zip 文件)的 lib 文件夹中。

【讨论】:

【参考方案2】:

我看到您正在使用 UCanAccess,纯 JDBC 驱动程序。这种情况下你必须加载这个驱动:

Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");

或者,您可以像这样加载 JDBC/ODBC 驱动程序类:

 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

这种情况,URL格式是这样的:

jdbc:odbc:Driver=Microsoft Access Driver (*.mdb);DBQ=myDB.mdb;

另外,不要忘记关闭资源:ResultSet、Statement 和 Connection。

【讨论】:

“或者,您可以加载 JDBC/ODBC 驱动程序类”- 不适用于 Java 8。已删除 JDBC/ODBC 桥。

以上是关于线程“主”java.lang.NoClassDefFoundError 中的异常:org/apache/commons/lang/builder/CompareToBuilder的主要内容,如果未能解决你的问题,请参考以下文章

主线程啥都没做,就会等待子线程结束。这是为啥?

Android 异步操作Android 线程切换 ( 判定当前线程是否是主线程 | 子线程中执行主线程方法 | 主线程中执行子线程方法 )

子线程怎么不阻塞主线程

QT中UI主窗口如何与子线程相互传递参数

java 子线程 回调 主线程

C++怎么在主线程中使用子线程的数据? 比如说主线程中有一个数组,如何在子线程中调用这个数组