xlsx File auslesen Exception occured

maechi

Mitglied
Ich will aus einer .xlsx datei Namen(Spalte C = 2) und Mobilfunknummer(AA = 26) auslesen. Wenn ich das Programm nicht exportiere sondern von IntelliJ(aktuellste Version) aus starte funktioniert alles perfekt. Wenn ich es exportiere kommt direkt beim Start eine Meldung vom JVM Launcher "A Java Exception has occurred." Das Programm ist gewachsen und diese Zusatzfunktion wurde hinzugefügt. Wenn ich diese wieder auskommentiere funktioniert auch der Export als .jar File. Hiermal der Teil welcher Probleme bereitet:
Java:
//Namen zu den Rufnummern anzeigen
try {

    //Zum Einlesen der Namen zu den Rufnummern
    XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(namensListe));
    XSSFSheet sheet = wb.getSheetAt(0);
    int fg = 0;
    for (int i = 1; i < sheet.getLastRowNum(); i++) {
        XSSFRow row = sheet.getRow(i);

        try {
            Cell rufnummerCell = row.getCell(2);
            String rufnummer = ("0" + rufnummerCell.toString().substring(2));

            falscheRufnummer = rufnummer;

            Cell nameCell = row.getCell(26);
            String name;
            if (nameCell == null) {
                name = rufnummer;
            } else {
                name = nameCell.toString();
            }
            rufnummerAndName.put(rufnummer, name);

        } catch (Exception e) {
            //
            JOptionPane.showMessageDialog(null, e.getMessage() + "\nEs handelt sich dabei um diese Rufnummer: " + falscheRufnummer + " in Zeile " + i++);
            fg++;
        }

    }
    if (fg>0) {
        System.out.println(fg);
        //JOptionPane.showMessageDialog(null, fg + " der Einträge aus der Namensliste konnte sind fehlerhaft - " + fehler);
    }

    wb.close();
} catch (Exception e) {
    JOptionPane.showMessageDialog(null, "Die Excelliste mit den Namenszuordnung ist fehlerhaft");
    System.out.println(e.getStackTrace());
}

Da beim Start direkt Fehler erscheinen hier auch mal noch meine Main-Methode:
Java:
public static void main(String[] args) throws Exception {
    Hauptfenster H1 = new Hauptfenster();
    H1.setContentPane(new Hauptfenster().Panel2);
    H1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    H1.setSize(1350, 700);
    H1.setLocationRelativeTo(null);
    H1.setVisible(false);
    H1.setTitle("O2 Rechnungen auswerten");
    H1.setVisible(true);

    setH1(H1);
}

PS: Hoffentlich das richtige Unterforum 🙂 ist mein erster Post
 
Wenn ich es exportiere kommt direkt beim Start eine Meldung vom JVM Launcher "A Java Exception has occurred."
Hier wäre es interessant zu erfahren um welche Exception es sich handelt inkl StackTrace. Entweder sorgst du dafür das der Konsolenoutput in ein File kommt oder du baust ein logging Framework in das Programm ein.

Das Programm ist gewachsen und diese Zusatzfunktion wurde hinzugefügt. Wenn ich diese wieder auskommentiere funktioniert auch der Export als .jar File. Hiermal der Teil welcher Probleme bereitet:
Wird dieser Codeteil direkt beim starten ausgeführt? Mein Tipp ins Blaue (leider lässt sich ohne wirkliche Exception bzw. StackTrace nur schwer was sagen) der Pfad zur xlsx Datei ist falsch -> FileNotFoundException.
 
Hier wäre es interessant zu erfahren um welche Exception es sich handelt inkl StackTrace. Entweder sorgst du dafür das der Konsolenoutput in ein File kommt oder du baust ein logging Framework in das Programm ein.
Hab mich evt ein bisschen falsch ausgedrückt. Das exportieren klappt sehr gut. Erst wenn ich den .jar File starte kommt ein Fenster von der JVM mit der Meldung. Welche Exception das ist, weiß ich selber leider auch nicht. Kann ich die mit dem von dir genannten Konsolenoutput ersehen? Und wenn ja wie geht das? Stichworte reichen, es gibts ja Google


Wird dieser Codeteil direkt beim starten ausgeführt? Mein Tipp ins Blaue (leider lässt sich ohne wirkliche Exception bzw. StackTrace nur schwer was sagen) der Pfad zur xlsx Datei ist falsch -> FileNotFoundException.
Dieser Codeteil wird NICHT beim starten ausgeführt. Erst beim Klick auf einen Button. Der Fehler kommt jedoch direkt mit starten

Java:
 public static String namensListe = "U:\\folder\\Subfolder\\SubSubfolder\\ExcelListe.xlsx";
so sieht der link dazu aus.
Wieso überhaupt kann IntelliJ das Programm ausführen? Sollte da dann nicht auch eine Exception geworfen werden?
 
Wieso überhaupt kann IntelliJ das Programm ausführen? Sollte da dann nicht auch eine Exception geworfen werden?
Viele glauben nur weil es mit der IDE funktioniert müsste es als JAR auch klappen. Aber je nach Zugriff müssen dann bestimmte Resourcen relativ zum JAR liegen und dann gibts zum Beispiel eine FileNotFoundException 😉

Hab mich evt ein bisschen falsch ausgedrückt. Das exportieren klappt sehr gut. Erst wenn ich den .jar File starte kommt ein Fenster von der JVM mit der Meldung. Welche Exception das ist, weiß ich selber leider auch nicht. Kann ich die mit dem von dir genannten Konsolenoutput ersehen? Und wenn ja wie geht das? Stichworte reichen, es gibts ja Google

Wie startest du die exportierte JAR? Per Doppelklick oder über die Konsole. Wenn du sie über die Konsole startest solltest du den Konsolenoutput zu sehen bekommen
 
Ich starte eigentlich immer per doppelklick.
Wenn über die Konsole ausführe kommt "Fehler: Hauptklasse O2 Rechnungen final.jar konnte nicht gefunden oder geladen werden"

Hab auch schon versucht den Dateinamen umzubennen damit die leerezeichen aus dem Dateinamen wegfallen. Kommt aber exakt die selber Meldung.
Hab auch schön mit anführungszeichen in der Konsole gearbeitet also:
Java "O2 Rechnungen final".jar

Die jar datei liegt übrigens lokal auf meinem Rechner und alle Links sind hard eingecodet mit Laufwerksbuchstaben und nicht relativ
 
Hauptfenster.java dort ist meine main MEthode

Hab die .jar auch schon in Hauptfenster.jar umbenannt und ausgeführt aber kommt dennoch das er die Hauptklasse nicht finden bzw. nicht geladen werden kann
 
Jetzt klappt es!!!
Ausgabe ist:
Exception in Thread "main" java.lang.NoClassDefFoundError: org/apache/poi/xssf/usermodel/XSSFWorkbook
at Hauptfenster.<clinit>(Hauptfenster.java:37)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.xssf.usermodel.XSSFWorkbook
at java.net.URLClassLoader.findClass(Unknown Source)
at lava.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at Java.lang.ClassLoader.loadClass (Unknown Source)
... 1 more

Wenn ich das so sehe ist in dem jar File ein fehlendes Artifact. Aber hab auch schon alle Artifacts in die Jar datei gemacht hatte dann so knapp 14 MB und hat immer noch nicht geklappt jetzt. So hat sie nur noch 2 MB
 
Un was ist die entsprechende Bibliothek? Eig doch die POI aber wenn ich die dazu mache kommt immernoch der gleiche fehler.
Jede .jar datei die mir IntelliJ anbietet klappt nicht. Hab einmal POI-3.15.jar, POI-ooxml-3.15.jar und dann werden mir noch einige Maven's angezeigt. Da ist allerdings keine org.apache.poi.xssf.usermodel.XSSFWorkbook dabei.
Da bin ich dann wieder verwundert. Selbst wenn ich alle verfügbaren Elemente einfüge und ich auf die besagten 14 MB komme geht es dennoch nicht. Evt muss ich diese org.apache.poi.xssf.usermodel.XSSFWorkbook Library noch hinzufügen aber dann versteh ich nicht warum IntelliJ das Programm vollkommen richtig und Fehlerfrei laufen lassen kann und es unter der JVM nicht mal schafft zu starten. IntelliJ braucht diese Klassen ja auch irgendwo her.

Edit:
Laut: http://poi.apache.org/overview.html#components müsste dies ja in poi-ooxml vorhanden sein was bereits im .jar File vorhanden ist!?
 
Du wirst doch IntelliJ gesagt haben welche Bibliothek es einbinden soll damit du die gewünschten Klassen verwenden kannst.
Ich kann es dir nicht sagen, tippe aber auf POI-3.15.jar. Schau am besten in die JAR rein und kontrolliere ob die entsprechenden Klassen dort vorhanden sind bzw. welche JAR in IntelliJ als Lib angegeben ist.
 
Ich habe in IntelliJ lediglich iText-5.5.6.jar(für PDF Ausgabe = funktioniert), POI-3.15.jar und POI-ooxml-3.15.jar hinzugefügt
Habe die jar's geöffnet und unter dem Link die die Konsole ausgabe(org.apache.poi.xssf.usermodel.XSSFWorkbook) und in der poi-ooxml-3.15.jar habe ich genau diesen Link gefunden und konnte mit IntelliJ sogar die Klasse XSSFWorkbook öffnen. Wenn ich diese poi-ooxml-3.15.jar jedoch zusammen mit iText... und poi-3.15.jar in einbinde kommt immer noch der Fehler das er die Klasse XSSFWorkbook nicht finden kann. Aber die ist ganz sicher mit in dem jar File dabei
 
Nun hab ich die Lösung gefunden. Ich habe bisher immer die Bibliotheken als .jar zu meinem Projekt hinzugefügt. Mit einem rechtsklick auf den verfügbaren .jar file 'extract into Output root' wird die entpackte datei hinzugefügt. Nun funktioniert auch alles. Warum die iText.jar automatisch entpackt wurde ist mir allerdings immer noch nicht ganz klar. Jedoch ist mein Problem damit gelöst. Besten dank für den Support.
Ohne Joose wüsste ich bist jetzt noch nicht mal was es für ein Fehler ist 😀
 

Neue Themen


Zurück
Oben