Guava:java.lang.NoClassDefFoundError - com.google.common.collect.HashBiMap

时间:2012-05-29 18:45:41

标签: android hashmap guava bimap

当使用从此处下载的guava库时,我目前面临java.lang.NoClassDefFoundError:com.google.common.collect.HashBiMap的问题: http://code.google.com/p/guava-libraries/

我已经将guava-12.0.jar添加到我的项目中作为参考库但我仍然得到错误。你能就这个问题给出一些建议吗?谢谢你的帮助

package my.project;

import android.app.Activity;
import android.os.Bundle;

import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;

public class MainActivity extends Activity{

     private BiMap<String,String>  bidiMap; 

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);     
          setContentView(R.layout.bible_help_cal);

        bidiMap = HashBiMap.create();           
        bidiMap.put("a","100");
        bidiMap.put("b","200");


    }


}

我收到错误消息

05-29 18:35:19.737: E/AndroidRuntime(376): FATAL EXCEPTION: main
05-29 18:35:19.737: E/AndroidRuntime(376): java.lang.NoClassDefFoundError: com.google.common.collect.HashBiMap
05-29 18:35:19.737: E/AndroidRuntime(376):  at my.project.MainActivity.onCreate(MainActivity.java:18)
05-29 18:35:19.737: E/AndroidRuntime(376):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
05-29 18:35:19.737: E/AndroidRuntime(376):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1712)
05-29 18:35:19.737: E/AndroidRuntime(376):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1764)
05-29 18:35:19.737: E/AndroidRuntime(376):  at android.app.ActivityThread.access$1500(ActivityThread.java:122)
05-29 18:35:19.737: E/AndroidRuntime(376):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1002)
05-29 18:35:19.737: E/AndroidRuntime(376):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-29 18:35:19.737: E/AndroidRuntime(376):  at android.os.Looper.loop(Looper.java:132)
05-29 18:35:19.737: E/AndroidRuntime(376):  at android.app.ActivityThread.main(ActivityThread.java:4025)
05-29 18:35:19.737: E/AndroidRuntime(376):  at java.lang.reflect.Method.invokeNative(Native Method)
05-29 18:35:19.737: E/AndroidRuntime(376):  at java.lang.reflect.Method.invoke(Method.java:491)
05-29 18:35:19.737: E/AndroidRuntime(376):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
05-29 18:35:19.737: E/AndroidRuntime(376):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
05-29 18:35:19.737: E/AndroidRuntime(376):  at dalvik.system.NativeStart.main(Native Method)

5 个答案:

答案 0 :(得分:12)

此错误表示该类在编译时可用,但在运行时无法找到。当编译时类路径与运行时类路径不同时,最常发生这种情况。

您的运行时类路径很可能不包含番石榴罐。要验证这一点,请在代码中尝试printing your classpath

在命令行上

,您可以使用:  java -cp“path / to / guava.jar”MyMainClass

或者,设置CLASSPATH环境变量以包含jar。

答案 1 :(得分:2)

就我而言,我的库里有guava和google-collection。 google-collection库与番石榴库有冲突。如果您同时拥有guava和google-collection,请尝试删除google-collection以重建。

答案 2 :(得分:2)

我尝试使用上游Guave 21和22,启用sourceCompatibility JavaVersion.VERSION_1_8。这导致SDK版本24以下的设备出现此错误。解决方案是使用仍支持Java 7的guave版本,后者已经为Android移植了。

dependencies {
  compile 'com.google.guava:guava:23.3-android'
}

答案 3 :(得分:1)

从这里Guava

下载Guava库

清洁和建造。适合我。 希望能帮助到你。干杯

答案 4 :(得分:0)

就我而言,我尝试使用选项 guava-17.0.jar 添加Add External JARs...,而是问题。当我移动了我的项目文件夹中的guava-17.0.jar (在Libs文件下)时我没有问题。

当然,我删除了外部JAR并使用 Add JARs... 选项再次添加