2

症状:我正在使用从创建者的 git 存储库中提取的项目。我包含了他们的库,如libs文件夹中所示。项目没有错误,项目编译。然而,当它访问一个应该在 jar 中的对象时,它会崩溃。

我已经做了一些我在这里读过的其他建议。我读过一些关于改变的东西classpath,那在哪里?

此外,jar 的 src 代码显示有问题的对象实际存在....

ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

05-30 11:26:16.878: E/AndroidRuntime(11098): FATAL EXCEPTION: main
05-30 11:26:16.878: E/AndroidRuntime(11098): java.lang.NoClassDefFoundError:      twitter4j.conf.ConfigurationBuilder
05-30 11:26:16.878: E/AndroidRuntime(11098):    at com.pigmal.android.ex.twitter4j.TwitterApp.askOAuth(TwitterApp.java:110)
05-30 11:26:16.878: E/AndroidRuntime(11098):    at com.pigmal.android.ex.twitter4j.TwitterApp.onClick(TwitterApp.java:144)
05-30 11:26:16.878: E/AndroidRuntime(11098):    at android.view.View.performClick(View.java:2482)
05-30 11:26:16.878: E/AndroidRuntime(11098):    at android.view.View$PerformClick.run(View.java:9077)
05-30 11:26:16.878: E/AndroidRuntime(11098):    at android.os.Handler.handleCallback(Handler.java:587)
05-30 11:26:16.878: E/AndroidRuntime(11098):    at a ndroid.os.Handler.dispatchMessage(Handler.java:92)
05-30 11:26:16.878: E/AndroidRuntime(11098):    at android.os.Looper.loop(Looper.java:130)
05-30 11:26:16.878: E/AndroidRuntime(11098):    at android.app.ActivityThread.main(ActivityThread.java:3683)
05-30 11:26:16.878: E/AndroidRuntime(11098):    at java.lang.reflect.Method.invokeNative(Native Method)
05-30 11:26:16.878: E/AndroidRuntime(11098):    at java.lang.reflect.Method.invoke(Method.java:507)
05-30 11:26:16.878: E/AndroidRuntime(11098):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-30 11:26:16.878: E/AndroidRuntime(11098):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-30 11:26:16.878: E/AndroidRuntime(11098):    at dalvik.system.NativeStart.main(Native Method)

这是我完整的项目设置。这使用 Android 的事实可能与这里无关,我不想通过标记 Android 来疏远 Java 专家

4

5 回答 5

4

这为我解决了http://android.foxykeep.com/dev/how-to-fix-the-classdefnotfounderror-with-adt-17

What I did to fix the bug was :

Remove the libraries from the standard Java build path :
Right click on the project name > Properties > Java Build Path > tab Libraries > remove      everything except the “Android X.X” (2.3.3 in my case) and the “Android Dependencies”
Rename the libraries folder from “lib” to “libs”
By doing that, all the libraries in the folder “libs” are found by the Android plugin and   are added to the “Android Dependencies” item of the project
Restart Eclipse
Android Dependencies should be created. Running the app won't produce NoClassDefFoundError anymore

除了我必须在遵循这些说明后重新启动 ECLIPSE 之外,而不仅仅是事后清理项目。

于 2012-05-30T20:09:57.703 回答
2

试试这个,这对我有用。

  1. 转到 Build Path,删除 twitter4j 库,然后执行 Ok。

  2. 转到 Build Path,选择 Add External Libraries,然后转到您从 github 下载的项目文件夹,然后转到其 lib 文件夹,您将在那里找到 twitter4j 文件,仅选择 twitter4j-core(但仅和只有当它仍然失败时,也包括 twitter4j-stream,在此之前只保留核心)并做 OK。

于 2012-05-30T18:55:23.033 回答
1

我有同样的问题,从构建路径中删除所有 twitter 库并将 lib 文件夹重命名为 libs 为我解决了这个问题

于 2012-06-13T05:30:34.660 回答
0

对我来说重命名文件夹,重新启动并没有解决问题。但是,在先前评论中发布的链接页面中,有一个答案解决了我的问题。这个回应说:

If you have references to jars that are not in the ‘libs’ folder, for example if you use ‘classpath variable’, you can resolve the NoClassDefFoundError issue with the new ADT 17 by exporting the references. To export the references: simply go to “Properties > Java Build Path > Order and Export”, and check all the references you want exported.

我必须在 src 文件夹之前移动 twitter jar

于 2013-07-12T08:50:52.143 回答
0

我认为你最好也为这个问题标记android。即使因为 ADT 版本,我也看到早期帖子中的人们也有类似的问题。理想情况下,由于您已将代码放在libs文件夹中,因此您应该能够获取所有这些类。但这似乎是一些运行时问题,而不是编译时间。

这似乎也特定于android。


您是否在类路径中手动添加了 jar?通常,当一个 jar 被添加到libs文件夹中时,它开始出现在里面Android Dependencies而不是直接显示在快照中。

于 2012-05-30T16:29:40.130 回答