Also muss ich die jexcelApi für mein Android-Projekt verwenden. Nach dem Einschließen bekomme ich keinen Compiler-Fehler, sondern eine Laufzeit-Ausnahme NoClassDefFoundError auf meinem Gerät für jede einzelne Klasse, die ich aus diesem Glas verwende. Das Dekompilieren zeigt, dass sich die benötigten Klassen im Jar befinden.NoClassDefFoundError obwohl .jar ist korrekt enthalten
Ich habe folgende Schritte:
- das Glas heruntergeladen
- kopiert es auf {Stammordner}/libs
compile fileTree(include: ['*.jar'], dir: 'libs')
in meinem gradle Build-Skript- sauber Projekt aufgerufen
- Erbaut das Projekt
Voll logcat Eintrag:
05-11 23:28:05.234 26289-26289/? E/Assignment: Spreadsheet Error
java.lang.NoClassDefFoundError: jxl.write.WritableFont
at com.example.bene.assignment.spreadsheet.SpreadsheetController.<init>(SpreadsheetController.java:43)
at com.example.bene.assignment.spreadsheet.SpreadsheetController.create(SpreadsheetController.java:34)
at com.example.bene.assignment.MainActivity.onCreate(MainActivity.java:62)
at android.app.Activity.performCreate(Activity.java:5008)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2035)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2096)
at android.app.ActivityThread.access$600(ActivityThread.java:138)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1207)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:4787)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
at dalvik.system.NativeStart.main(Native Method)bs')
Grüße folgenden Code:
// create Formats
WritableFont times10pt = new WritableFont(WritableFont.TIMES, 10);
// Define the cell format
mTimes = new WritableCellFormat(times10pt);
// Lets automatically wrap the cells
mTimes.setWrap(true);
// create create a bold font with unterlines
WritableFont times10ptBoldUnderline = new WritableFont(WritableFont.TIMES, 10, WritableFont.BOLD, false, UnderlineStyle.SINGLE);
mTimesBoldUnderline = new WritableCellFormat(times10ptBoldUnderline);
// Lets automatically wrap the cells
mTimesBoldUnderline.setWrap(true);
Ich weiß wirklich nicht, wie, um fortzufahren bitte helfen Sie mir! Vielen Dank im Voraus.
UPDATE
So fand ich gerade heraus, dass einige Pakete transitive Abhängigkeiten bekommen haben, die sie kompilieren einbezogen werden müssen. So fand ich folgende Links:
- Maven repository
- Source (kann es nicht veröffentlichen, weil der Stackoverflow restrictrions)
Zuerst sagen, dass ich compile 'log4j:log4j:1.2.14'
brauchen würde, zweitens sagen, dass ich
compile 'org.slf4j:slf4j-api:1.7.2'
compile 'org.slf4j:slf4j-log4j12:1.7.2'
Nach dem Maven-Link, bekomme ich das gleiche Ergebnis über
compile('net.sourceforge.jexcelapi:jxl:2.6.12') {
transitive= true
}
, die auf diese Aufgabe mein Abhängigkeitsbaum macht aussehen wie folgt: Dependency Tree
immer noch die gleiche Ausnahme beim Abrufen ...
ja es ist in dem mitgelieferten Glas vorhanden. –
@be_bri Das habe ich nicht gesagt. Ich sagte, überprüfe, ob 'jxl.write.WritableFont' in der JAR-Datei * als' /jxl/write/WritableFont.class'* vorhanden ist. – EJP