NoClassDefFoundError

A

AquaBall

Fortgeschrittenes Mitglied
2
Ich habe eine Muster-Klasse erstellt, die in meinem Testprogramm gut funktioniert.
Sie ist sauber gekapselt, in ein Package (package at.TyE.musterParser; ) verpackt, und hat nur die benötigten Methoden public.

Der Compiler auch in AndroidUmgebung erkennt anscheinend auch alles richtig:
und compiliert Warnungs-und Fehlerfrei
Code:
import at.TyE.musterParser.Muster;

...
    void formelInit(){
        Muster muster= new Muster("mein TestMuster");
    }
In meinem Testprogramm (nur console) funktioniert es einwandfrei.
Aber beim Start in AndroidUmgebung kommt immer der Laufzeit-Fehler:
NoClassDefFoundError
Was mach ich falsch?
 
Ich würde raten, dass die Klasse nicht in deinem classpath zu finden ist.
 
Das hab ich schon durchsucht.
Aber erstaunlicher Weise bin ich der Meinung, ClassPath gibts gar nicht mehr.
Zumindest ergibt "echo %CLASSPATH%" gar kein Ergebnis.
Ich vermute, dass das von Eclipse über Projekt-Einstellungen verwaltet wird.
Oder lieg ich da falsch???

Außerdem funktioniert die Classe ja in meinem Textprogramm (und einem neu angelegten 2. Testprogramm) einwandfrei.
Die Einstellungen in "Eigenschaften/Java-ErstellungsPfad/Projekte" und ".../Sortieren" sind im Wesentlichen gleich.
Nur dass beim Android-Programm mehr drin steht, und Android den Eintrag "Bibliothek JRE1.7" nicht verkraftet.

Mein WorkAround zur zeit funktioniert: (Löste aber meine Unverständnis nicht, was falsch ist.)
Ich habe die Musterklasse aus "TestProgramm/SRC" nach "AndroidPorgramm/SRC" verschoben. der folgende Fehler automatisch repariert. Nun läufts. Sowohl im AndroidProgramm, als auch in den Consolen-(Test)Programmen.

Aber meine Unsicherheit bleibt:
Was hab ich falsch gemacht?
Wird's im nächsten Android-Programm noch funktionieren?
Wie binde ich Packages richtig ein?
 
Seh ich das richtig, dass du deine Muster Klasse in einem Java Projekt hast und das in deinem Android Projekt verwenden willst und das Java Projekt referenzierst?

Wenn ja geht das so nicht, eben weil das Android SDK kein komplettes Java JDK bereit stellt. D.h. Klassen die mit dem JDK compiliert werden, können nicht in einem Android Projekt referenziert werden, da das JDK nicht im A-SDK vorhanden ist.

Also Objekte die du in einer App verwenden willst immer direkt in einem Android Projekt erstellen, dann hast du auch keine Probleme damit Features umzubauen, wenn das Android SDK die nicht unterstützt.
 
  • Danke
Reaktionen: AquaBall
Danke sehr aufschlussreich. War mir noch gar nicht bewusst.

Erst jetzt fällt mir auf, dass ich ja noch gar kein richtiges Paket gemacht habe.
Ist zwar sauber gekapselt und als package definiert, aber kein unabhängiges Modul, weil ich noch immer vom Sourcecode abhängig bin.

Muss mich da erst weiter einlesen, wie ich ein echtes Package mache, von dem im PacketExplorer gar nichts erscheint.

Dann müsste es wohl auch in Android verwendbar sein.

Aber wie das geht, weiß ich noch nicht.
 
Hab Eclipse grad nicht auf, aber müsste ungefähr Rechte Maustaste auf Projekt "export as jar" oder so sein. Und das jar dann im Projektsetup vom Android Projekt als Library hinzufügen. Das wiederum müsste funktionieren wenn keine JDK-only Klassen verwendet werden.
 
Zurück
Oben Unten