Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Zu meiner Frage: aus "Java ist auch eine Insel" habe ich mir das Beispiel mit dem Disko(Fieber) angeschaut (Java ist auch eine Insel – 6 Eigene Klassen schreiben )und habe versucht zu kompilieren, bekomme aber diesen Fehler: DiskoFieber.java:6 error: cannot find symbol.
Wenn ich richtig verstehe, wird die Klasse Disko nicht gefunden.
Warum?
Die beiden Dateien (Disko.java und DiskoFieber.java) habe ich My Documents/v1 gespeichert.
Könnt ihr einem Laie erklären? Von den Packages habe ich noch eine vage Ahnung, daher würde euch bitten dies zu berücksichtigen, falls das Problem daran liegen soll.
package v1;
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 ));
}
}
Dein Kommando zum Kompilieren ist falsch.
Deine Klassen liegen im package v1, du musst dich beim kompilieren also im Ordner in dem v1 liegt befinden (das wird src/ sein). Kompilieren kannst du dann so:
Danke EikeB, das ist wirklich mein Problem, zu verstehen, wo ich alle Dateien ablegen soll: bisher haben wir immer im Verzeichnis My Documents\UebungX abgelegt und aus diesem Verzeichnis aufgerufen.
Verstehe ich dich richtig, dass ich ebenfalls im Verzeichnis My Documents\UebungX noch ein src anlegen kann und dann auf der Console aus dem My Documents\UebungX\src mit javac v1\Disko.java kompilieren? Oder soll src irgendwoanders angelegt werden?
Könntest du mir dann noch erklären, wie ich in diesem Fall das Programm in diesem Fall laufen lasse?
Denn ich hatte wie oben beschrieben kompiliert aber das Programm weder mit java DiskoFieber:
Error: Could not find or load main class ...
noch mit java v1\DiskoFieber zum Laufen bringen kann:
Exeption in thread "main" java.lang.NoClassDefFoundError: v1\DiskoFieber (wrong name: v1/DiskoFieber)
Nein, einen src/ Ordner brauchst du nicht unbedingt. Ich dachte nur, dass du das Projekt in einer IDE angelegt hättest, da gibt diesen Ordner standardmäßig.
Deine Dateistruktur muss so aussehen:
My Documents/UebungX/v1/Disko.java
My Documents/UebungX/v1/DiskoFieber.java
Kompilieren musst du das ganze aus dem Ordner UebungX (da v1 dein package ist). Der Aufruf dazu lautet:
Code:
javac v1/Disko.java v1/DiskoFieber.java
Starten musst du die DiskoFieber.class Datei. Der Befehl java erwartet den (vollständigen) Klassennamen, der lautet in deinem Fall v1.DiskoFieber, der Aufruf lautet also:
Code:
java v1.DiskoFieber
Falls dir da noch irgendwas unklar ist, dann solltest du dir diese Grundlagen nochmal anschauen. Die sollten eigentlich in jedem Buch relativ weit am Anfang erklärt werden.
Danke EikeB, das ist wirklich mein Problem, zu verstehen, wo ich alle Dateien ablegen soll: bisher haben wir immer im Verzeichnis My Documents\UebungX abgelegt und aus diesem Verzeichnis aufgerufen.
Verstehe ich dich richtig, dass ich ebenfalls im Verzeichnis My Documents\UebungX noch ein src anlegen kann und dann auf der Console aus dem My Documents\UebungX\src mit javac v1\Disko.java kompilieren? Oder soll src irgendwoanders angelegt werden?
Die Antworten der Anderen sind natürlich korrekt, aber vielleicht ist es gerade für Anfänger hilfreich, sich gleich an "vernünftige" Verzeichnisstrukturen in Projekten zu gewöhnen. Die meisten Systeme, die Dich später beim Copilieren und Zuammenstellen des fertigen Programms unterstützen (Build-System) orienteren sich an der vom Apache vorgeschlagenen verzeichnis-Struktur: Maven - Introduction to the Standard Directory Layout.
In diesem Fall wäre das Arbeitsverzeichnis für das Compilieren
Code:
src/main/java
.
Damit dann auch die *.class-Dateien in
Code:
bin
landen sollte man das Projektverzeichnis als Arbeitsordner wählen (dass in dem sich
Code:
src
und
Code:
bin
befinden, und
Code:
javac
mit zsätzlichen Parametern aufrufen:
Code:
Projektverzeichnis>javac -sourcepath src/main/java -d bin package/JavaSource.java
Zum starten des Java Programms muss man dann der JVM noch sagen, dass die
Code:
*.class
Dateien in
Code:
bin
sind. Der Arbeitspfad bleibt das Projekt-Verzeichnis:
Code:
Projektverzeichnis>java -cp bin package.ClassWithMain
Ein bisschen: könnten Sie bitte genauer definieren, was Sie unter "Arbeitspfad", "Arbeitsordner", "Projektverzeichnis" verstehen:
*Projektverzeichnis - der Ordner, in dem sich meine *.class-Dateien befinden? Wenn ich sie nicht in bin abgelegt hatte?
Leider wird bei uns in der Übung auf die zusätzliche Parameter beim Kompilieren überhaupt nicht eingegangen.
wofür steht "-sourcepath src/main/java -d" hier:
Code:
Projektverzeichnis>javac -sourcepath src/main/java -d bin package/JavaSource.java
und
"-cp" hier
Code:
Projektverzeichnis>java -cp bin package.ClassWithMain
und welche Parameter können noch verwendet werden und wofür? (ein Link auf diese Info reicht, bitte lieber in Deutsch).
"Projektverzeichnis" verstehen:
*Projektverzeichnis - der Ordner, in dem sich meine *.class-Dateien befinden? Wenn ich sie nicht in bin abgelegt hatte?
Von Dir habe ich zum ersten mal erfahren, dass javac noch mit zusätzlichen Parametern verwendet wird... Wie gesagt, bei uns in der Übung wird dieses Thema überhaupt nicht behandelt