0

このコードを実行しようとすると、次の例外が発生します。

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)
4

2 に答える 2

0

例外を見ると、libバージョンが一致していないようです。HWPFDocumentCore.java:145が新しいPOIDocumentを構築しようとしているようですが、呼び出す予定のコンストラクターが見つかりません。HWPFDocumentCore.javaの145行目を見て、どのコンストラクターが期待されているかを確認します。次に、POIDocumentでそのようなコンストラクターを持つPOIライブラリーを探します。

于 2012-04-06T16:07:06.357 に答える
0

クラスパスに Apache POI の 2 つのコピー、古いものと新しいものがあるようです。私の推測では、HWPF jar (Scratchpad) は新しいものですが、古いコア POI jar を取得しているため、例外が発生しています。

必要なことは、クラスパス上のすべての jar を確認し、POI 関連の jar を特定してから、それらのセットが一貫していることを確認することです。

POI FAQには、まさにこの問題に関するエントリがあり、POI クラスがどの jar から来ているかを出力するために使用できる Java コードがいくつかあります。間違った jar を直接見つけることができない場合は、そこに示されているコードのようなものを Android コードに移植して、古い jar を見つけやすくしてください。

于 2012-04-09T15:36:01.343 に答える