• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

neues Problem: unerklärlich...Exception in thread "main" java.lang.NoClassDefFoundErr

Cyrics

Neuer Berner Rosenapfel
Registriert
01.04.05
Beiträge
1.973
Ähm... ich glaub ich verzweifel ein bisschen mit Java ;)

Also wie in diesem Thread schon geklärt, hab ich ein Package mit einer Oberklasse und einer von dieser abgeleiteten Unterklasse erstellt.

Nun hab ich eine neue Datei geschrieben um die Klasse Auto zu benutzen.
Daher wird erstmal das Package mit allen Unterpaketen importiert und dann eine main-Funktion genutzt.
Ich erzeuge ein neues Objekt, welches eine Instanz von Auto ist und dann soll eben mit dem Ablauf von der Klasse Auto gearbeitet werden. Kompilierung klappt wunderbar... aber Ausführung?

Denkste...
Fehlermeldung:
$ java Test
Exception in thread "main" java.lang.NoClassDefFoundError: fahrzeug/Auto
at Test.main(Test.java:11)

Der Quelltext sieht folgendermaßen aus:
Code:
//  Created by Torsten on 19.06.06.
//  Copyright 2006. All rights reserved.
//
import fahrzeug.*;

public class Test 
{
	public static void maein(String[] args)
	{
		Auto ein_auto;
		ein_auto = new Auto();
		if (ein_auto.eingeben())
			ein_auto.anzeigen();
		else
			System.out.println("Fehlerhafte Eingabe!");
	}
}
Zeile 11 wäre die Zeile wo der new-Operator genutzt wird.
Ich hab Strassenfahrzeug, Auto und Test alle im selben Verzeichnis. Kompiliert hab ich nun vom über geordneten Verzeichnis und Aufruf hab ich so ziemlich von jedem Verzeichnis aus *g*
 

klogg

Gast
Ich habe zwar kaum Java-Kentnisse
aber dafür C++.
Und zumindest dort liefer der "new" Befehl eine Adresse zurück.
(Die vom neu erzeugten Speicherbereich)
Du weist diese Adresse aber einem fertigen Objekt zu, keinem Zeiger.
("Auto ein_auto" statt "Auto * ein_auto")
In C/C++ wäre das falsch, wie's in Java aussieht weiß ich nicht.

klogg
 

Intenso

Süssreinette (Aargauer Herrenapfel)
Registriert
18.04.06
Beiträge
405
Exception in thread "main" java.lang.NoClassDefFoundError: fahrzeug/Auto
at Test.main(Test.java:11)

das bedeutet soviel wie: Er kann das Objekt Auto nicht erzeugen, da er nicht darauf zugreifen kann.
Jetzt ist die Frage:
wie hast du die Klasse Auto geschrieben, ist sie vielleicht "protected" und deine "Main-Methode" nicht im selben Packet, was ich vermute, da du "Fahrzeug.*" importierst.
dann ändere das Protected bei Auto auf Public und es wird funktionieren.

Für genaueres Debugging wäre der Code der Class Auto interessant.

mfg
Intenso
 

Cyrics

Neuer Berner Rosenapfel
Registriert
01.04.05
Beiträge
1.973
also der genaue Auto-Code ist oben verlinkt im anderen Thread.
Aber hier ist sonst noch einmal der direkte Link zu dem Beitrag mit den Quelltexten.

Auto ist als public deklariert. Einzig und allein die Oberklasse hat zwei protected Variablen deklariert, wobei dann der Fehler aber wohl ein anderer wäre, oder?

@klogg
also da unterscheidet sich java einfach von c++. Gott sei Dank ;)
von der Programmierung her find ich Java da wesentlich einfacher... auf jeden Fall fällt diese Pointer-Geschichte bei Java weg :) es wird nur ein Datentyp sozusagen übergeben und dann ein neues Objekt von der Klasse iniziiert.

PS:
ICH HABS GESCHAFFT!
Ich hasse den Java-Compiler... ich hasse ihn einfach... also meine Test.java durfte nicht ins selbe Verzeichnis, sondern in das übergeordnete um das Package fahrzeug.* importieren zu können, welches ja dann sozusagen der Ordner war ;)
Von der Logik her... naja... also wenn man langsam diese Macken von dem Compiler verstanden hat...

dann geht die Zeitplanung wohl immer dahin: 1 Stunde Quelltext schreiben, 1 Tag Fehlersuche aufgrund von Compiler-Macke.
 

Demo

Süssreinette (Aargauer Herrenapfel)
Registriert
02.04.04
Beiträge
411
Cyrics schrieb:
Ich hasse den Java-Compiler... ich hasse ihn einfach... also meine Test.java durfte nicht ins selbe Verzeichnis, sondern in das übergeordnete um das Package fahrzeug.* importieren zu können, welches ja dann sozusagen der Ordner war ;)
Von der Logik her... naja... also wenn man langsam diese Macken von dem Compiler verstanden hat...

Sorry, aber das hat mit dem Compiler nix zutun. Es ist eher so, dass Du das Package Prinzip nicht verstanden hast. Wenn Du schon das Package fahrzeug importierst, dann muss zwingend gegeben sein, dass sich die Klasse, die das Package importiert nicht im selben Ordner befindet. Das hast Du ja schon selbst geschrieben. Das Du das nicht gemacht hast, dafuer kann der Compiler ja nix.

dann geht die Zeitplanung wohl immer dahin: 1 Stunde Quelltext schreiben, 1 Tag Fehlersuche aufgrund von Compiler-Macke.

Das ist immer so, wenn man eine Sprache neu lernt. Java != C++, auch wenn es da Gemeinsamkeiten gibt. Darauf sollte man sich auch einstellen. Das Prinzip der Namensraeume bei C# ist ja auch ein voellig anderes als das Package Prinzip bei Java, obwohl die Sprachen sich schon sehr aehneln.
 

slayercon

Meraner
Registriert
17.01.05
Beiträge
231
2 Tipps zu Java :
1.)
Deine Klasse Test.java hat keine package Deklaration das ist schlechter Stil den nichts sollte im default package liegen.

2.) Wenn dich javac so nervt (was ich verstehen kann), du aber keine IDE verwenden willst solltest du einfach ANT beutzen um zu kompilieren/builden.

ANT ist das (IMHO verbesserte) JAVA Gegenstück zu make.
 

Cyrics

Neuer Berner Rosenapfel
Registriert
01.04.05
Beiträge
1.973
Demo schrieb:
Sorry, aber das hat mit dem Compiler nix zutun. Es ist eher so, dass Du das Package Prinzip nicht verstanden hast. Wenn Du schon das Package fahrzeug importierst, dann muss zwingend gegeben sein, dass sich die Klasse, die das Package importiert nicht im selben Ordner befindet. Das hast Du ja schon selbst geschrieben. Das Du das nicht gemacht hast, dafuer kann der Compiler ja nix.
Nicht alles was ich hasse oder was schlecht ist, ist automatisch schuld! ;)
Eigentlich fast immer ist es der Benutzer vor der Tastatur... und ja... dafür, dass ich mich gerade mal eine Woche damit beschäftige, finde ich, dass ich bei Java relativ weit bin und wenn ich dann wegen solchen Kleinigkeiten hängen bleibe, ist das einfach frustrierend ;) (das muss man doch irgendwie zum Ausdruck bringen *g*)
Man sollte eigentlich auch schon gemerkt haben, dass ich java sehr mag, gerade weil es nicht wie C++ ist, welches ich wohl nie mehr anrühren werde. So langsam ist das mit dem package auch verinnerlicht, und je mehr Fehler man macht, desto schneller lernt man (hoffentlich) *g*

also wie dem auch sei... nicht alles so ernst nehmen :p

@slayercon
zu erst zu zweitens:
ich finde meine derzeitige Terminal-Java-Lösung eigentlich sehr gut. Ich bin froh, dass ich mich nur auf das grundlegende Beschränke.
dann zu erstens:
wieso schlechter Stil? Ich brauch doch bloss eine Testdatei, die mein erzeugtes Package verwendet. Welchem Package sollte ich dieser Testdatei denn zuordnen?
package test;?!
Ich denk das ist vollkommen unrelevant... alle Klassen die zu meinem package Fahrzeug gehören, werden auch selbstverständlich diesem package zugeordnet. Alles was nicht dazu gehört importiert nun mein package fahrzeug. Und erhält selbstverständlich auch kein neues package, weil das in meinen Augen keinen Sinn ergibt.
 

slayercon

Meraner
Registriert
17.01.05
Beiträge
231
Das mit den packages ist nun mal Konvention so wie großgeschriebene Klassennamen.

Java ist die Sprache des Internets du kannst wenn du willst deine Domain als package verwenden
zb at.kwmedia.xxx etc

:) Sogar Eclipse sagt : "The use of default packages is discouraged"

aber nix für ungut wollte dich nur darauf hinweisen wie du es machst is schlussendlich deine Sache

lg S.
 

Cyrics

Neuer Berner Rosenapfel
Registriert
01.04.05
Beiträge
1.973
aber ehrlich, ich hab das mit den package selber erst seit gestern genutzt und es auch vorher nie bei jemanden gesehen. Und so wie es bekannt scheint, scheint es ja doch eher selten benutzt zu werden. Kommt mir zumindest nur so vor... ich halt mich auf jeden Fall dran und packe die Dateien, die auch zusammen gehören in ein package... versprochen :-D
 

slayercon

Meraner
Registriert
17.01.05
Beiträge
231
Und wenn du mal ein Projekt mit hunderten Klassen hast wirst du es mir danken :)