web-dev-qa-db-ja.com

Java.lang.NoClassDefFoundErrorを与えるもの

Excelファイルを読みたいのですが

    Exception in thread "main" Java.lang.NoClassDefFoundError: org/Apache/xmlbeans/XmlObject
 at ExcelReader.main(ExcelReader.Java:32)
Caused by: Java.lang.ClassNotFoundException: org.Apache.xmlbeans.XmlObject
at Java.net.URLClassLoader$1.run(Unknown Source)
at Java.net.URLClassLoader$1.run(Unknown Source)
at Java.security.AccessController.doPrivileged(Native Method)
at Java.net.URLClassLoader.findClass(Unknown Source)
at Java.lang.ClassLoader.loadClass(Unknown Source)
at Sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at Java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more

私を助けてください。最初に.xlsxファイルを開いてから、最初のシートを渡します。最後にコンソールでExcelファイルのデータを印刷します。 Ps:私はpoi-ooxml-3.9-20121203.jarをプロジェクトに追加します。

    import Java.io.File;
    import Java.io.FileInputStream;
    import javax.swing.text.html.HTMLDocument.Iterator;
    import org.Apache.poi.hssf.usermodel.HSSFSheet;
    import org.Apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.Apache.poi.ss.usermodel.Cell;
    import org.Apache.poi.ss.usermodel.Row;
    import org.Apache.poi.xssf.usermodel.XSSFSheet;
    import Java.util.*;
    import org.Apache.poi.xssf.usermodel.XSSFWorkbook;
    /**
     * @author mohammad hosein
    *
    */
    public class ExcelReader {

/**
 * @param args
 */
public static void main(String[] args) {
    try
    {
    FileInputStream file = new FileInputStream(new File("E:\\test.xlsx"));

    //Get the workbook instance for XLS file 
    XSSFWorkbook workbook = new XSSFWorkbook (file);

    //Get first sheet from the workbook
    XSSFSheet sheet = workbook.getSheetAt(0);

    //Get iterator to all the rows in current sheet
    Java.util.Iterator<Row> rowIterator = sheet.iterator();

    while(rowIterator.hasNext())
    {
        Row row = rowIterator.next();
        Java.util.Iterator<Cell> cellIterator = row.cellIterator();

        while(cellIterator.hasNext())
        {
            Cell cell = cellIterator.next();
            System.out.print(cell.getStringCellValue() + "\t");
        }
        System.out.println("");
    }
    }
    catch(Exception e)
    {
        System.out.println("EROR!");
    }

    //Get iterator to all cells of current row

}

}

7
sharafi

あなたのコードは無関係です。 NoClassDefFoundErrorは、コンパイル時に使用できたクラスが実行時に使用できない場合に発生します。完全なスタックトレースを、見つからなかったクラスの実際の名前とともに提供した場合、より正確なアドバイスを与えることができます。

通常、これは、コードのビルドに使用されたものとは異なるバージョンのJARでコードを実行しているときに発生します。不正なJARは、アプリケーションコンテナなどから取得され、適切なJARよりもクラスパスの前に配置される場合があります。

更新

追加したスタックトレースを考えると、Apache POI:XMLBeansの推移的な依存関係がありません。実行時にこのJARが欠落している可能性があります。これはすべて、プロジェクトをどの程度正確に実行しているかによって異なります。

12
Marko Topolnik

プロジェクトのプロパティでライブラリをチェックするのを忘れていると思います。

  1. プロジェクトを右クリック->プロパティを選択
  2. 選択Javaビルドパス
  3. タブオブジェクトを選択してエクスポート
  4. 次に、追加したライブラリを選択します。
  5. そしてOkその後、プロジェクトを再度実行します。

これは、必要なpoi jarファイルがすべて追加されていない場合に発生します。したがって、必要なすべてのjarファイルを追加することをお勧めします。 libおよびooxml-libフォルダー内のjarファイルをpoi-3.15-beta2 jarファイルとともに追加します。 jarを追加する方法

  1. プロジェクトを右クリック
  2. Buildpath> ConfigureBuildpath
  3. [ライブラリ]タブ
  4. 外部jarファイルを追加する
2
user3437379

ライブラリに「commons-collections.jar」ファイルが追加されていることを確認してください。そうでない場合は、ここからすべてのライブラリファイルをダウンロードしてください。

http://www-us.Apache.org/dist/poi/release/bin/poi-bin-3.16-20170419.Zip

Zipファイルにダウンロード後、「lib」フォルダーを開くと、添付の画像にあるように、プロジェクトライブラリに追加する必要があるcommon-collectins.jarファイルが見つかります。

Image shows all necessary libraries

1
A.Aleem11

Apache POIドキュメントは さまざまなコンポーネントとその依存関係の完全なリスト を提供します。 poi-ooxmlを使用したいが、xmlbeans依存関係を見逃しているようです(おそらく他の依存関係も!)。すべてが必要なものの詳細については、 コンポーネントページ を参照してください。

Apache POIのバイナリリリース をダウンロードすると、必要なすべての依存関係がパッケージに含まれていることがわかります。必要なものを追加するだけです。

手動での作業がすべて難しい場合は、 Apache Maven または Apache Ivy のようなものを使用して、依存関係を管理します。

次に、これらのjarファイルを2回使用できるようにする必要があります。コンパイル用と実行用です。 Eclipseなどでjarファイルを用意するだけでは不十分な場合があります。それらを実稼働環境に取り込む必要もあります。

1
Gagravarr

XSSFWorkbookがそれらを使用するときに含まれる必要があるpoi-3.9に付属する2つの重要なjarファイルがあります。

xmlbeans * .jar dom4j-*。jar

これらのjarは両方ともooxml-libフォルダーにあり、poi-3.9 * .Zipの一部です。それらをライブラリに含めれば、問題が解決するはずです。

0
vikas kapdoskar

ビルドパスにxmlbeans-2.3.0.jarを追加します。これは、xlsxに必要です。

0
Saurabh

NoClassDefFoundErrorは、コンパイル時にクラスが存在したが、Java実行時にクラスパスで使用できない場合に発生します。通常、NoClassDefFoundErrorを取得すると、以下の行がログに表示されます。

このサイト は、このエラーが発生する理由をすべて示します。解決方法は3通りあります。

0
Arun

私は同じ問題を抱えていました。 (Netbeansを使用して)フォルダー全体をライブラリーに追加することにより、\ ooxml-lib \フォルダーにJARを追加しました。私はこれを削除し、それぞれを手動で追加しましたが、うまくいきました。

0
RudebwoyG

名前がClassNotFoundExceptionを示唆しているようにJavaはJava.lang.Exceptionのサブクラスであり、Java Virtual Machineが試みたときに来ます特定のクラスをロードし、要求されたクラスがクラスパスに見つからない

この例外に関するもう1つの重要な点は、チェック済み例外であり、ClassNotFoundException in =をスローする可能性のあるメソッドを使用しているときに明示的に例外処理を提供する必要があることです。 Java try-catchブロックを使用するか、throws句を使用します。

Oracleドキュメント

public class ClassNotFoundException
 extends ReflectiveOperationException

アプリケーションが文字列名を使用してクラスをロードしようとすると、次のようにスローされます。

  • クラスClassのforNameメソッド。
  • クラスClassLoaderのfindSystemClassメソッド。
  • クラスClassLoaderのloadClassメソッド。

しかし、指定された名前のクラスの定義が見つかりませんでした。

poi-ooxml-schemas-3.9-20121203.jarファイルをクラスパスに追加して、例外を回避します。
これらのリンクにあります

  1. Apache
  2. jarを取得

編集

POIに付属する追加のjarファイルがありません。それらをクラスパスに含めます。
xmlbeans-x.x.x.jarという名前のjarファイルを含める必要があります ここにjarを取得
XMLBeans

0
Aniket Kulkarni

通常、NoClassDefFoundErrorexceptionは、必要なjarが利用できない場合に発生します。

以下の条件を確認してください

  1. Jar file pathデフォルトで追加したpoi-ooxml-3.9-20121203.jar
  2. 追加のjarが必要かどうかを完全に確認します。コンパイル時に、インポートしていないクラスファイルがプログラムに必要になる場合があります。

  3. poi-3.7-jdk1.4-20110508-rc2 jarが必要です。

0
kark