Wenn Sie eine .xlsx-Datei mit einem Apache-POI öffnen, wird NoClassDefFoundError InvalidFormatException angezeigt
Ich habe Probleme, den Import aller erforderlichen .jar-Dateien zum korrekten Funktionieren zu bringen. Mein Endziel ist es, einfach eine Excel-Tabelle (genauer gesagt XLSX-Dateien) einzulesen, um zu überprüfen, ob die Geschwindigkeit des Apache-POI für zukünftige Anwendungen funktioniert.
Meine Frage ist, warum bekomme ich den Fehler geworfen ...
java.lang.NoClassDefFoundError: org / apache / poi / openxml4j / exceptions / InvalidFormatException
... wenn ich in der Klasse InvalidFormatException unter / org / apache / poi / openxml4j / exceptions / in der Datei poi-ooxml-3.9-20121203.jar sehen kann?
Ich habe eine Weile nicht mehr in Java programmiert und hoffe auf meine eigene Vernunft, dass ich einen dummen Fehler gemacht habe. Mein Code scheint korrekt zu kompilieren, aber ich habe die obige Fehlermeldung, wenn ich versuche, das Programm auszuführen. Ich habe einige Nachforschungen zu meinem Problem angestellt, konnte jedoch niemanden in meiner Situation finden. Normalerweise vergessen sie einfach die erforderliche .jar-Datei bzw. haben sie keine .jar-Datei. Vielleicht bin ich im selben Boot, aber hoffentlich kannst du es mir sagen.
Ich werde eine Aufschlüsselung meiner Logik geben. Hier ist der Code 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', die zum Kompilieren und Ausführen des Java-Codes verwendet wird:
javac -classpath "/home/robsco/Webdev/java/poi/*" TestExcel.java
java TestExcel
Hier ist die Verzeichnisliste des obigen Klassenpfads:
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 '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 benutze:
Betriebssystem: Lubuntu 12.10 x 86
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