线程“Thread-0”中的异常java.lang.NoClassDefFoundError

时间:2014-07-30 09:21:03

标签: java multithreading

当我尝试运行以下代码示例时,它给了我java.lang.NoClassDefFoundError异常。我看了相关的问题。所以他们没有解决我的问题。 有人可以帮忙吗?

public class UnitsSearchExample implements Runnable {
    private Session session;

// Login to server
private void login(){
    // initialize Wialon session
    session.initSession("http://hst-api.wialon.com");
    // trying login
    session.login("wialon_test", "test", new ResponseHandler() {
        @Override
        public void onSuccess(String response) {
            super.onSuccess(response);
            // login succeed
            System.out.println(String.format("Logged successfully. User name is %s", session.getCurrUser().getName()));
            //call search units
            searchUnits();
        }

        @Override
        public void onFailure(int errorCode, Throwable throwableError) {
            super.onFailure(errorCode, throwableError);
            // login failed, print error
            System.out.println(Errors.getErrorText(errorCode));
        }
    });
}

private void searchUnits(){
    //Create new search specification
    SearchSpec searchSpec=new SearchSpec();
    //Set items type to search avl_units
    searchSpec.setItemsType(Item.ItemType.avl_unit);
    //Set property name to search
    searchSpec.setPropName("sys_name");
    //Set property value mask to search all units
    searchSpec.setPropValueMask("*");
    //Set sort type by units name
    searchSpec.setSortType("sys_name");
    //Send search by created search specification with items base data flag and from 0 to maximum number
    session.searchItems(searchSpec, 1, Item.dataFlag.base.getValue(), 0, Integer.MAX_VALUE, new SearchResponseHandler() {
        @Override
        public void onSuccessSearch(Item... items) {
            super.onSuccessSearch(items);
            // Search succeed
            System.out.println("Search items is successful");
            printUnitsNames(items);
            logout();
        }
        @Override
        public void onFailure(int errorCode, Throwable throwableError) {
            super.onFailure(errorCode, throwableError);
            // search item failed, print error
            System.out.println(Errors.getErrorText(errorCode));
            logout();
        }
    });
}

private void printUnitsNames(Item... items){
    if (items!=null && items.length>0) {
        System.out.println(String.format("%d units found\r\nPrinting their names...", items.length));
        //Print items names
        for (Item item : items)
            System.out.println(String.format("\t%s", item.getName()));
    }
}
// Logout
private void logout(){
    session.logout(new ResponseHandler() {
        @Override
        public void onSuccess(String response) {
            super.onSuccess(response);
            // logout succeed
            System.out.println("Logout successfully");
            System.exit(0);
        }

        @Override
        public void onFailure(int errorCode, Throwable throwableError) {
            super.onFailure(errorCode, throwableError);
            // logout failed, print error
            System.out.println(Errors.getErrorText(errorCode));
            System.exit(0);
        }
    });
}

@Override
public void run() {
    // get instance of current Session
    session=Session.getInstance();
    login();
}

public static void main(String[] args){
    new Thread(new UnitsSearchExample()).start();
}
}

堆栈跟踪

Exception in thread "Thread-0" java.lang.NoClassDefFoundError: com/google/gson/JsonElement at wialonTest.UnitsSearchExample.run(UnitsSearchExample.java:110) at java.lang.Thread.run(Thread.java:744) 
Caused by: java.lang.ClassNotFoundException: com.google.gson.JsonElement 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 atjava.net.URLClassLoader.findClass(URLClassLoader.java:3 at 
java.lang.ClassLoader.loadClass(ClassLoader.java atsun.misc.Launcher$AppClassLoader.loadCla –

1 个答案:

答案 0 :(得分:2)

您必须在类路径中设置该包。

你可以在这里得到它:

https://code.google.com/p/google-gson/downloads/list

如果您正在使用eclise进行开发,那么要放入类路径,您必须将它放在构建路径中(项目 - 属性 - java构建路径 - 库 - 添加外部JAR - 选择jar)。

这应解决这个问题......

编辑:你有一个依赖缺失的问题。要解决这个问题,你应该使用像maven这样的一些依赖管理器,或者将每个丢失的jar添加到你的类路径中,为此找到互联网中的jar并重做将它们添加到eclipse中的项目中。

要在互联网上找到它们,请尝试使用Google搜索:

“java maven< .....>”

例如,java maven org / apache / http / client / methods /将您发送到*:

http://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient/4.1.1

你可以点击'下载jar'获取jar和它所依赖的所有Jars(在同一页面中,向下滚动,然后有)。下载它们,添加到puild路径及其完成...

努力工作?是的,这就是为什么优先使用像maven这样的经理。使用maven,您可以复制并粘贴<依赖性> ..< \&依赖性GT;在您的pom.xml文件中,它将为给定的依赖项下载所有必需的jar ...

*你也可以在制造商的页面中找到包裹,他可以给你一个包含所有必需依赖的包裹。但可以肯定的是:你会有更多的例外情况,所以我会把你送到maven存储库,其中几乎就是你需要的所有罐子。