Pakete schnüren

Hai, Auskenner,

ich versuch hier gerade, zwei Klassen in ein Paket zu bekommen, aber eine Klasse findet die andere nicht :frowning:

Beide Klassen beginnen mit pakage paket;. Beide befinden sich in c:/paket. Beide compilieren einwandfrei - miteinander spielen wollen sie aber nicht.

Auch Musterdateien von C. Ullenboom spielen nicht miteinander…

Was fehlt denn noch?

fragt
Sibylle

Korrektur: …beginnen mit package paket&

Hallo,

Beide Klassen beginnen mit pakage paket;.
Beide befinden sich in c:/paket. Beide compilieren einwandfrei

  • miteinander spielen wollen sie aber nicht.

Was kommt denn für eine Fehlermeldung? Wie startest du das Programm?

Hai, Deconstruct,

Was kommt denn für eine Fehlermeldung? Wie startest du das
Programm?

sorry, doch schon beim Compilieren:

=============== Running Profile: Compilieren und Ausführen ===============

-------------------------------------------------------------------------
Commandline: C:\Programme\Java\jdk1.5.0\_06\bin\javac.exe DiskoFieber.java
Workingdirectory: C:\v1
Timeout: 10 sec, Delay: 0 sec, Started: 07.26.08 14:56:35
-------------------------------------------------------------------------

DiskoFieber.java:10: cannot find symbol
symbol : class Disko
location: class v1.DiskoFieber
 Disko abzappler = new Disko();
 ^
DiskoFieber.java:10: cannot find symbol
symbol : class Disko
location: class v1.DiskoFieber
 Disko abzappler = new Disko();
 ^
2 errors

Process "Compilieren" completed with Exit Code 1, at 07.26.08 14:56:36.
Aborted running Profile due to a bad Exit Code, expected 0 but got 1.

Erstellt unter synTextEditor und dort per „RunFile / Compilieren und Ausführen“

(komischerweise hat’s zwischendurch mal kurz funktioniert…)

Gruß
Sibylle

Commandline: C:\Programme\Java\jdk1.5.0_06\bin\javac.exe
DiskoFieber.java
Workingdirectory: C:\v1

Du kompilierst denke ich im falschen Verzeichnis.
Ist die Datei DiskoFieber.java in einem Package (also oben in der Datei steht „package xxx;“)? Und wenn ja, wie heißt das Package?

1 Like

Du kompilierst denke ich im falschen Verzeichnis.
Ist die Datei DiskoFieber.java in einem Package (also oben in
der Datei steht „package xxx;“)?

Ja: package v1;
Das sind die Beispieldateien von C. Ullenboom aus „Java ist auch eine Insel“

Und wenn ja, wie heißt das
Package?

v1 *g*

*langsam’nirrenBlickkrieg*

Du kompilierst denke ich im falschen Verzeichnis.
Ist die Datei DiskoFieber.java in einem Package (also oben in
der Datei steht „package xxx;“)?

Ja: package v1;

Dann kompilierst du im falschen Verzeichnis. Java sucht die Datei DiskoFieber im Unterverzeichnis „v1“ ausgehend vom Arbeitsverzeichnis, da die Datei im Package v1 ist. Das Arbeitsverzeichnis war aber bei dir C:\v1 und da ist die Datei ja direkt schon drin (sieht man in der Ausgabe von deiner Kompilierung)

Du musst also in C:\ direkt die Kompilierung starten. Manuell kannst du das machen in dem du „Start -> Ausführen“ machst, dort „cmd“ eintippst und ok klickst. Dann solltest du einen Konsole haben. Dort machst du dann „cd c:“ um ins Verzeichnis c:\ zu wechseln. Dort startest du dann die Kompilierung in dem du „javac v1\DiskoFieber.java“ eingibst.

Im Prinzip wenn du also ein Package hast wie „das.ist.mein.package“ und du hast darin eine Java-datei „MyClass“, dann lautet deren voller Java-Name das.ist.mein.package.MyClass.
Und Java sucht die Datei dann unter AKTUELES_VERZEICHNIS\das\ist\mein\package\MyClass.java

1 Like

Juhu
er compiliehiert … er compilihiert…

Du musst also in C:\ direkt die Kompilierung starten. Manuell

*grumpf* Warum schreiben die das nicht ins Buch?!

Fühl Dich erstmal geknuddelt und geknuutscht :wink:

…und wenn Du mir jetzt noch erklären könntest, warum beim Ausführen nicht die erwarteten paar Zeilen kommen, sondern vom synTextEditor aus diese Fehlermeldung (Quelltext ganz unten):

=============== Running Profile: Ausführen ===============

-------------------------------------------------------------------
Commandline: C:\Programme\Java\jdk1.5.0\_06\bin\java.exe DiskoFieber
Workingdirectory: C:\v1
Timeout: 10 sec, Delay: 0 sec, Started: 07.26.08 18:34:13
-------------------------------------------------------------------

java.lang.NoClassDefFoundError: DiskoFieber (wrong name: v1/DiskoFieber)
 at java.lang.ClassLoader.defineClass1(Native Method)
 at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
 at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
 at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
 at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
 at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
 at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
Exception in thread "main" 

Process "Java Starten" completed with Exit Code 1, at 07.26.08 18:34:13.
Aborted running Profile due to a bad Exit Code, expected 0 but got 1.

und vom prompt (c:\ oder c:\v1) aus

Exception in thread "main" java.lang.NoClassDefFoundError: DiskoFieber
Caused by: java.lang.ClassNotFoundException: DiskoFieber
 at java.net.URLClassLoader$1.run(Unknown Source)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at java.lang.ClassLoader.loadClassInternal(Unknown Source)

v1/DiskoFieber.java

package v1;
public class DiskoFieber
{
/**
* Teste alles.
*/
public static void main( String[] args )
{
Disko abzappler = new Disko();
abzappler.quadratmeter = 5;

System.out.println( "Fun: " + abzappler.unterhaltungswert() );

abzappler.personRein();
abzappler.personRein();

System.out.println( abzappler.anzahlPersonen() ); // 2

System.out.println( "Fun: " + abzappler.unterhaltungswert() );
}
}

v1/Disko.java
package v1;

/**
* Modelliert eine Disko.
*/
public class Disko
{
int anzahlPersonen; // Anzahl Personen in der Disko

int quadratmeter; // Größe der Disko

/**
* Person kommt in die Disko.
*/
void personRein()
{
anzahlPersonen++;
}

/**
* Person verlässt die Disko.
*/
void personRaus()
{
if ( anzahlPersonen > 0 )
anzahlPersonen–;
}

/**
* Liefert Anzahl Personen in der Disko.
*
* @return Anzahl Personen.
*/
int anzahlPersonen()
{
return anzahlPersonen;
}

/**
* Liefert den Unterhaltungswert der Disko.
*
* @return Unterhaltungswert.
*/
int unterhaltungswert()
{
return (int) (anzahlPersonen * Math.sqrt( quadratmeter ));
}
}
Verzweiflungstränen-vergießend

*grumpf* Warum schreiben die das nicht ins Buch?!

Das kann ich dir leider auch nicht sagen :wink:

…und wenn Du mir jetzt noch erklären könntest, warum beim
Ausführen nicht die erwarteten paar Zeilen kommen, sondern vom
synTextEditor aus diese Fehlermeldung (Quelltext ganz
unten):

Commandline: C:\Programme\Java\jdk1.5.0_06\bin\java.exe
DiskoFieber
Workingdirectory: C:\v1

Gleiches Problem wie gerade:
Ähnlich wie beim Kompilieren darfst du das Programm nicht aus dem Package-Ordner C:\v1 starten, sondern Java muss so aufgerufen sein, dass die Packages in Unterordnern liegen.

Also wenn du in C:\ den Java-Befehl startest dann klappts. Siehe folgenden Log aus meiner Kommando-Zeile.

C:\Users\XXXXX\>cd C:\

C:\\>javac v1\DiskoFieber.java

C:\\>java v1.DiskoFieber
Fun: 0
2
Fun: 4

C:\\>

Allgemein gilt beim Ausführen:
Du startest eine Java-Klasse (die braucht dazu die public static void main()-Methode) in dem du Java so startest:

java voller.paketname.KlassenName

Dazu muss es in dem Verzeichnis in dem du den Befehl die kompilierte Java-Klasse (*.class Datei) geben und zwar im Unterordner …\voller\paketname\KlassenName.class

Verzweiflungstränen-vergießend

Nicht verzweifeln. Ich hab dein Programm ausprobiert, das kompiliert und läuft :smile:

Ich kenne den Editor nicht, mit dem du da arbeitest. Aber ich denke man kann ihn so einstellen, dass er das richtige Arbeitsverzeichnis benutzt und die Befehle richtig auführt. Aber wie das bei dem Editor geht, weiss ich nicht.
Eine Alternative für dich wäre eventuell Eclipse. Das hat einen eigenen Kompiler eingebaut und daher stellen sich die Probleme dort gar nicht :wink: Zu finden unter http://www.eclipse.org
Nach dem Starten legst du ein neues Java-Projekt an. Und dort kannst du dann neue Java-Packages und neue Java-Klassen anlegen. Kompilieren tut das Programm automatisch und starten kann man die Anwendung, in dem man z.B. in der Java-Klasse die man starten will rechts klickt und dann „Run as Java Application“ wählt.

1 Like

Boah *freu*
Dankedankedankedanke

http://www.eclipse.org

Hab ich mir angeschaut - ich denke, das werd ich erst benutzen, wenn ich Java tatsächlich geblickt habe.

Mein Dank wird Dir ewig nachschleichen (zumindest so lange, bis ich die nächste peinliche Frage hab :wink: )

Gruß
Sibylle