Eröffnung .xlsx-Datei mit Apache POI gibt NoClassDefFoundError InvalidFormatException
Ich habe Probleme dabei, den import aller erforderlich .jar-Dateien korrekt arbeiten.
Mein end-Ziel ist einfach zu Lesen in einer excel-Tabelle (genauer gesagt .xlsx-Dateien), um zu überprüfen, ob die Geschwindigkeit des Apache-POI-arbeiten für zukünftige Anwendungen.
Meine Frage ist, warum bin ich immer der Fehler geworfen...
java.lang.NoClassDefFoundError: org/apache/poi/openxml4j/Ausnahmen/InvalidFormatException
...wenn ich sehen kann, in der Klasse InvalidFormatException at /org/apache/poi/openxml4j/Ausnahmen/im 'Datei poi-ooxml-3.9-20121203.jar'?
Ich bin noch nicht zum Programmieren in Java in eine Weile, und ich bin der Hoffnung, für meine eigene geistige Gesundheit, die ich gemacht habe einen dummen Fehler. Mein code scheint zu kompilieren korrekt, aber ich habe die obige Fehlermeldung, wenn ich versuche das Programm auszuführen. Ich habe einige der Forschung getan in meinem Thema aber noch nicht in der Lage gewesen, jemanden zu finden in meiner situation. Sie in der Regel nur vergessen/nicht eine erforderlich .jar-Datei. Vielleicht bin ich im gleichen Boot, aber hoffentlich werden Sie in der Lage, mir zu sagen.
Werde ich eine Aufschlüsselung meiner Logik. Hier ist der code, der in TestExcel.java
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
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.ss.usermodel.WorkbookFactory;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
public class TestExcel
{
public static void main(String[] args)
{
InputStream inp;
try
{
inp = new FileInputStream("cost.xlsx");
Workbook wb;
try {
wb = WorkbookFactory.create(inp);
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
}
catch (InvalidFormatException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
Hier ist die Datei "c_test" benutzt, um zu kompilieren und führen Sie den java-code:
javac -classpath "/home/robsco/Webdev/java/poi/*" TestExcel.java
java TestExcel
Hier ist die Auflistung im Verzeichnis des classpath oben:
robsco@roblaptop:~/Webdev/java/poi$ ls -al
total 26616
drwxrwxr-x 2 robsco robsco 4096 Aug 18 18:13 .
drwxrwxr-x 6 robsco robsco 4096 Aug 18 18:12 ..
-rwxr-xr-- 1 robsco robsco 52915 Sep 18 2009 commons-logging-1.1.jar
-rwxr-xr-- 1 robsco robsco 313898 Apr 5 2009 dom4j-1.6.1.jar
-rwxr-xr-- 1 robsco robsco 121070 Apr 5 2009 junit-3.8.1.jar
-rwxr-xr-- 1 robsco robsco 358180 Apr 5 2009 log4j-1.2.13.jar
-rwxrw-r-- 1 robsco robsco 14841622 Aug 18 13:15 ooxml-schemas-1.1.jar
-rwxr-xr-- 1 robsco robsco 1869113 Nov 26 2012 poi-3.9-20121203.jar
-rwxr-xr-- 1 robsco robsco 30446 Nov 26 2012 poi-excelant-3.9-20121203.jar
-rwxr-xr-- 1 robsco robsco 936648 Nov 26 2012 poi-ooxml-3.9-20121203.jar
-rwxr-xr-- 1 robsco robsco 4802621 Nov 26 2012 poi-ooxml-schemas-3.9-20121203.jar
-rwxr-xr-- 1 robsco robsco 1226511 Nov 26 2012 poi-scratchpad-3.9-20121203.jar
-rwxr-xr-- 1 robsco robsco 2666695 Apr 5 2009 xmlbeans-2.3.0.jar
und die Ausgabe von der Ausführung von "c_test':
robsco@roblaptop:~/Webdev/java$ ./c_test
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/openxml4j/exceptions/InvalidFormatException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2521)
at java.lang.Class.getMethod0(Class.java:2764)
at java.lang.Class.getMethod(Class.java:1653)
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.openxml4j.exceptions.InvalidFormatException
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 6 more
ich verwende:
OS: Lubuntu 12.10 x86
java -version
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
robsco@roblaptop:~/Webdev/java/poi$ javac -version
javac 1.7.0_25
Danke für die Antwort @Gagravarr. Ich habe versucht, den code auf das FAQ und Hinzugefügt einen import für die POIFSFileSystem und URL-Klassen und habe diesen Fehler zur Laufzeit:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/poifs/filesystem/POIFSFileSystem at TestExcel.main(TestExcel.java:24)
Es scheint seltsam, dass es nicht finden können, die Klasse, wenn ich gezielt importiert und die poi-jar auf mein classpath.Ihre shell-Skript wird übergeben werden in einen Klassenpfad für das kompilieren (javac) Schritt, aber nicht ausführen (java -) Schritt, konnte es so einfach sein?
Das war es! Danke @Gagravarr. Ich fühle mich ein bisschen blöd jetzt über die Annahme der externen Gläser wurden irgendwie in Verbindung zur compile-Zeit. Fügen Sie Ihren Kommentar als eine Antwort und ich werde es akzeptieren. Ich musste das tun, als auch für andere Interessierte, um die externen Bibliotheken und meine Klasse verknüpft zur Laufzeit: stackoverflow.com/questions/7485670/...
InformationsquelleAutor robsco | 2013-08-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, wie Sie starten Ihr Programm. Ich sehe, Sie haben derzeit ein shell-script:
Dass läßt sich mit allen Gläsern, aber nicht mit Ihnen, so dass Ihr Programm noch nicht haben, deren Abhängigkeiten zur Verfügung. (Im Gegensatz zu mit einige c-Programme kompilieren mit Java nicht inline depdendencies, noch wird es Sie auf lokale links zu den Dateien. Es gibt tools, die das für Sie tun, wenn Sie es wirklich brauchen obwohl)
Wenn Sie Ihre shell-script zu sein:
Sollte es funktionieren. Beachten Sie das hinzufügen des aktuellen Verzeichnisses in den classpath, um für "java" zu finden, die Ihre Klasse (in diesem Fall TestExcel).
Abwechselnd, Sie konnte etwas tun, ein wenig kitschig mit environment-Variablen, mit der
CLASSPATH
envvar, dass Java-Prüfungen, z.B.InformationsquelleAutor Gagravarr