【问题标题】:Java Exception: NoClassDefFoundError even if place the jar files into classpath correctly [duplicate]Java异常:NoClassDefFoundError即使将jar文件正确放入类路径[重复]
【发布时间】:2016-07-18 08:55:42
【问题描述】:

我现在正在使用 poi-3.9,我将创建一个 Android 6.0 应用程序来使用 Eclipse 读取、写入和创建 Excel 文件。我尝试使用 .xls 来执行此操作,但它始终是只读的,并且要求我将新文件另存为 .xlsx,因此我现在使用 .xlsx 执行此操作。

据我所知,在这种情况下,我需要 poi.jar 文件才能使我的应用程序正常工作。所以我把 poi-ooxml-schemas-3.9、poi-3.9 和 poi-ooxml-3.9 jar 文件放到类路径中。但是问题是导入XSSFWorkbook可以编译java但是运行时找不到,出现NoClassDefFoundError。

这里是java中的导入

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

这是 LogCat 中的完整错误消息。

E/AndroidRuntime(5363): FATAL EXCEPTION: main

E/AndroidRuntime(5363): Process: com.example.rentingmanager, PID: 5363

E/AndroidRuntime(5363): java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/poi/xssf/usermodel/XSSFWorkbook;

E/AndroidRuntime(5363):     at com.example.rentingmanager.NewItem.read(NewItem.java:97)

E/AndroidRuntime(5363):     at com.example.rentingmanager.NewItem.confirm(NewItem.java:323)

E/AndroidRuntime(5363):     at com.example.rentingmanager.NewItem.onClick(NewItem.java:333)

E/AndroidRuntime(5363):     at android.view.View.performClick(View.java:5201)

E/AndroidRuntime(5363):     at android.view.View$PerformClick.run(View.java:21209)

E/AndroidRuntime(5363):     at android.os.Handler.handleCallback(Handler.java:739)

E/AndroidRuntime(5363):     at android.os.Handler.dispatchMessage(Handler.java:95)

E/AndroidRuntime(5363):     at android.os.Looper.loop(Looper.java:148)

E/AndroidRuntime(5363):     at android.app.ActivityThread.main(ActivityThread.java:5525)

E/AndroidRuntime(5363):     at java.lang.reflect.Method.invoke(Native Method)

E/AndroidRuntime(5363):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)

E/AndroidRuntime(5363):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)

E/AndroidRuntime(5363): Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.poi.xssf.usermodel.XSSFWorkbook" on path: DexPathList[[zip file "/data/app/com.example.rentingmanager-1/base.apk"],nativeLibraryDirectories=[/data/app/com.example.rentingmanager-1/lib/arm64, /vendor/lib64, /system/lib64]]

E/AndroidRuntime(5363):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)

E/AndroidRuntime(5363):     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)

E/AndroidRuntime(5363):     at java.lang.ClassLoader.loadClass(ClassLoader.java:469)

E/AndroidRuntime(5363):     ... 12 more

E/AndroidRuntime(5363):     Suppressed: java.lang.ClassNotFoundException: org.apache.poi.xssf.usermodel.XSSFWorkbook

E/AndroidRuntime(5363):         at java.lang.Class.classForName(Native Method)

E/AndroidRuntime(5363):         at java.lang.BootClassLoader.findClass(ClassLoader.java:781)

E/AndroidRuntime(5363):         at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)

E/AndroidRuntime(5363):         at java.lang.ClassLoader.loadClass(ClassLoader.java:504)

E/AndroidRuntime(5363):         ... 13 more

E/AndroidRuntime(5363):     Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

这就是我将 JAR 放入类路径中所做的操作

enter image description here

我想知道为什么以及解决问题的方法。任何答案将不胜感激,谢谢。

【问题讨论】:

  • 您是否将罐子添加到您交付的工件中?
  • 嗯,通常情况下,消息不会说谎。如果 Android 告诉你它找不到你的类,我猜:你的陈述“类路径中的 jars”一定是错误的。因为这就是消息告诉您的内容:当 Android 开始搜索您需要的类时,它们不可用。
  • JAR 可以在编译类路径中,但在生成的工件(在本例中为 APK)中缺失。您需要将它们添加到 APK 构建说明中。
  • 将它添加到你的类路径
  • 对不起,我仍然缺乏经验。如何将它们添加到 APK 构建说明中?

标签: java eclipse noclassdeffounderror


【解决方案1】:

这是因为类在编译时找到但在运行时不可用Refer this link

【讨论】:

  • 感谢您的回复。我试图按照您发布的链接进行操作。我删除了 JAR 并将它们添加为变量,但问题无法解决。我稍后会尝试其他可能的解决方案,再次感谢。
【解决方案2】:

试试这个:

在您的项目中转到 Properties -> Java Build Path -> Order and Export,取消选中 Android Dependencies 选项,执行一个 clean & Build 项目。

这描述在:Android ClassNotFoundException: Didn't find class on path

【讨论】:

  • 感谢您的回复,但我按照您的建议做了,问题依然存在
猜你喜欢
  • 1970-01-01
  • 2018-12-10
  • 2012-07-17
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
  • 1970-01-01
  • 2013-10-15
  • 1970-01-01
相关资源
最近更新 更多