Servus,
um user unknowns Frage zu beantworten: Es wäre „jxl“ ohne „jexcelapi“. Tada! 😉
zwän schrieb:
genau so, wie es sich frisch aus der .jar entpackt hat.
Gibt es einen Grund, warum du die JAR entpacken musst? Du kannst sie auch als Ganzes in den Classpath setzen.
Also, will sagen: Die Klassen der jexcel-API sind alle so definiert, dass sie an oberster Stelle im Java-Package „jxl“ liegen. Package-Namen und Verzeichnisnamen müssen zusammenfallen. Das heißt, eine Klasse „foo.bar.MeineKlasse“ muss auch im Verzeichnis „foo/bar/“ liegen. Das hast du sicher auch schon gewusst, sonst hättest du nämlich dein „import“-Statement nicht angepasst. Was dein angepasstes „import“ aber aussagt, ist, dass auf eine Klasse namens „jexcelapi.jxl.Workbook“ zugegriffen werden soll: eine Klasse „Workbook“ aus dem Package „jexcelapi.jxl“. Das stimmt zwar zufällig mit dem Pfad im Dateisystem überein, aber die Klasse „Workbook“ wurde so definiert, dass sie nur im Package „jxl“ liegt.
Daher beschwert sich dein Compiler, dass er die Datei zwar findet, darin aber eine andere Klasse ist (weil die Information über das Package falsch ist).
Du kannst mit den „import“-Statements keine beliebigen Pfade im Dateisystem angeben. Dort muss immer das korrekte Package stehen, wo auch immer sich das auf deiner Festplatte dann befindet. Belasse es also bei einem einfachen:
Damit der Compiler das dann auch findet, musst du den Classpath erweitern. Wenn du an der Kommandozeile kompilierst und du dir den Schritt mit dem Entpacken der JAR mal sparst, dann kann das so aussehen:
$ javac -cp /pfad/zur/jxl.jar ExcelTry.java
(Klassennamen beginnen übrigens immer mit einem Großbuchstaben. Auch im Quellcode.)
Wenn du das ausführen willst, hast du dasselbe Problem nochmal. Diesmal müssen sich aber die jxl-Klassen und auch deine eigenen Klassen im Classpath befinden. Angenommen, deine Klasse sieht so aus wie du das oben hast (befindet sich also im Default-Package) und du befindest dich in dem Verzeichnis, in dem die „ExcelTry.class“ befindet, dann so:
$ java -cp .:/pfad/zur/jxl.jar ExcelTry
Dein Classpath besteht dann aus „.“, also dem aktuellen Verzeichnis, und der „jxl.jar“. Ausgeführt wird die Klasse „ExcelTry“. Das findet er dann alles (… nachdem du dich im Quellcode um die Exceptions gekümmert hast, wird es auch laufen, aber das wirst du dann schon merken).
HTH. ☺