我在尝试运行此代码时遇到异常。
java.lang.NoSuchMethodError:org.apache.poi.POIDocument。< init>
代码段:
try {
File file = new File(externalPath + "/abc.doc");
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(file));
HWPFDocument doc = new HWPFDocument(fs);
Range range = doc.getRange();
CharacterRun run = range.insertAfter("Hello World!");
run.setFontSize(2 * 18);
run.setBold(true);
run.setItalic(true);
run.setCapitalized(true);
OutputStream out = new FileOutputStream(new File(externalPath + "/agnew.doc"));
doc.write(out);
out.flush();
out.close();
} catch (Exception ex) {
Log.e("Exception==","=="+ex.toString());
ex.printStackTrace();
}
logcat的:
Logcat : FATAL EXCEPTION: main : java.lang.NoSuchMethodError: org.apache.poi.POIDocument. :
at org.apache.poi.hwpf.HWPFDocumentCore.(HWPFDocumentCore.java:145) :
at org.apache.poi.hwpf.HWPFDocument.(HWPFDocument.java:218) :
at org.apache.poi.hwpf.HWPFDocument.(HWPFDocument.java:186) :
at com.vikas.prudent.CreateDocument.onCreate(CreateDocument.java:45) :
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) :
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) :
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) :
at android.app.ActivityThread.access$2300(ActivityThread.java:125) :
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) :
at android.os.Handler.dispatchMessage(Handler.java:99) :
at android.os.Looper.loop(Looper.java:123) :
at android.app.ActivityThread.main(ActivityThread.java:4627) :
at java.lang.reflect.Method.invokeNative(Native Method) :
at java.lang.reflect.Method.invoke(Method.java:521) :
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) :
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) :
at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:0)
只是查看异常,它似乎是lib版本不匹配。看起来像HWPFDocumentCore.java:145正在尝试构造一个新的POIDocument但无法找到要调用的预期构造函数。我将看一下HWPFDocumentCore.java的第145行,看看它期待什么构造函数。然后在POIDocument中查找具有此类构造函数的POI库。
答案 1 :(得分:0)
听起来你的类路径上有两个Apache POI副本,旧的一个和一个新副本。我的预感是你的HWPF jar(Scratchpad)是新的,但它正在拿起一个旧的核心POI jar,这就是你获得异常的原因。
您需要做的是检查类路径上的所有jar,并识别与POI相关的jar,然后确保您拥有一致的jar。
POI FAQ有and entry on this very problem,还有一些Java代码可以用来打印出POI类来自哪个jar。如果您无法直接找到错误的罐子,请尝试将类似于此处显示的代码移植到您的Android代码中,以帮助您找到旧罐子。