Hauptmethode in Klasse nicht gefunden.

RememberdiAlamo

Aktives Mitglied
Hallo, liebe Community, ich habe da ein kleines Problem mit dem Compilieren eines Codes und zwar, habe ich diese Meldung:

Hauptmethode in Klasse Person nicht gefunden. Definieren Sie die Hauptmethode als:
public static void main(String[] args)
Wieso verlangt Java immer diese Hauptmethode? Ich habe eine andere gewählt..

public class Person {
private String FirstName, LastName;

public Person (String firstName, String lastName)
{
super();
this.FirstName = FirstName;
this.LastName = LastName;
}

static Person toPerson (String text)
{
String[] attributes=text.split ("\\|");
if (attributes.length !=2) throw new RuntimeException ();
else return new Person (attributes[0], attributes[1]);
}

public String getFirstName () {
return FirstName;
}
public void setFirstName (String FirstName) {
this.FirstName = FirstName;
}

public String getLastName () {
return LastName;
}
public void setLastName (String LastName) {
this.LastName = LastName;
}

public String toString() {
return FirstName + "|" + LastName+"\n";
}

public boolean equals (Object other) {
throw new RuntimeException ();
}
}
 
Woher soll die JVM denn wissen, welches deine Hauptmethode ist?

Sie könnte natürlich raten, aber einfach eine bestimmte Methode zu nutzen ist schon einfacher 😉
Du muss ja auch nicht mehr tun, als deine eigene passende Methode aufzurufen...
 
naja, ich gebs zu ich bin mit Perl in den letzten Monaten fremdgegangen, da muss ich mich erstaml noch eingewöhnen wie Java hier mit den Proggis umgeht... also ich habe das Programm mit Notepad++ geschrieben, die Klasse habe ich Person genannt und habe es auch als Person.java gespeichert, so weit so gut. Jetzt will java aber unbedingt public static void main(String[] args) haben.. soll ich das einfach unter "public class Person {" einfügen? Sorry, aber ich hatte dieses Problem noch wirklich nie, daher weiß ich nicht so recht was ich da machen soll...
 
aber ich hatte dieses Problem noch wirklich nie
Wie du hattest dieses Problem noch nie ? Du hast dieses "Problem" bei jedem Programm das du schreibst. Und um deine Frage zu beantworten: Ja du brauchst diese Methode genau so. Und du musst darin natürlich das machen was dein Programm erst mal zum laufen bringt.

Edit:
Ich habe eine andere gewählt..
Welche denn ? in dem geposteten Code war nichts dergleichen zu finden
 
Man kann es z.B. so machen:

Java:
public class Person {
	private String FirstName, LastName;

	public Person(String firstName, String lastName) {
		super();
		this.FirstName = FirstName;
		this.LastName = LastName;
	}

	static Person toPerson(String text) {
		String[] attributes = text.split("\\|");
		if (attributes.length != 2)
			throw new RuntimeException();
		else
			return new Person(attributes[0], attributes[1]);
	}

	public String getFirstName() {
		return FirstName;
	}

	public void setFirstName(String FirstName) {
		this.FirstName = FirstName;
	}

	public String getLastName() {
		return LastName;
	}

	public void setLastName(String LastName) {
		this.LastName = LastName;
	}

	public String toString() {
		return FirstName + "|" + LastName + "\n";
	}

	public boolean equals(Object other) {
		throw new RuntimeException();
	}

	public static void main(String[] args) {
		// TODO
	}
}
 
danke, ich habe das wie gesagt ganz oben direkt unter public class person geschrieben.. tatsächlich habe ich die Hauptklasse vernachlässigt aufzuschreiben 🙂
Jetzt klappt wenigstens das kompilieren. Aber es scheint nichts zu machen, hmm.. muss noch etwas dran arbeiten.
Danke
 
bitte 😀


public class Person {
public static void main(String[] args) {
}
private String FirstName, LastName;

public Person (String firstName, String lastName)
{
super();
this.FirstName = FirstName;
this.LastName = LastName;
}

static Person toPerson (String text)
{
String[] attributes=text.split ("\\|");
if (attributes.length !=2) throw new RuntimeException ();
else return new Person (attributes[0], attributes[1]);
}

public String getFirstName () {
return FirstName;
}
public void setFirstName (String FirstName) {
this.FirstName = FirstName;
}

public String getLastName () {
return LastName;
}
public void setLastName (String LastName) {
this.LastName = LastName;
}

public String toString() {
return FirstName + "|" + LastName+"\n";
}

public boolean equals (Object other) {
throw new RuntimeException ();
}
}
 
Er wird deshalb nichts machen weil bei main nichts drin steht.
naja, ist ja logisch.. das war leider nicht im Plan.. vielleicht steht die geschlossene eckige Klammer falsch? Ach der Umstieg von Perl zurück auf Java, wie hätte ich ahnen können dass es solche Probleme mir bereiten würde 🙁
Naja, back to the basics, hehehe..... he ^^
Ich glaub außerdem dass ich mal die Groß/Kleinschreibung nochmals im Code überdenken sollte 🙂
 
Beim Konstruktor werden noch Warnings angezeigt. Ich glaube du wolltest es eigentlich so machen:
Java:
    public Person(String firstName, String lastName) {
        super();
        this.FirstName = firstName;
        this.LastName = lastName;
    }
 
Das sollte halt ein kleines Proggi sein, für die Verwaltung von Personen.. daher habe ich auch das super () mit implementiert um die Konstruktoren der ganzen Klasse aufzurufen. Sollte das etwa weg?
 
vielleicht steht die geschlossene eckige Klammer falsch?
Daran liegt es nicht. Wenn man es wie folgt schreiben würde würde es übrigens ebenfalls funktionieren:
Java:
public static void main(String args[])

Das würde heißen, dass der Konstruktor der Oberklasse aufgerufen wird. Er hat aber keine zugewiesen. Aber in solchen Fällen ist ja "Object" die Oberklasse.
 
@RememberdiAlamo
Der Code in der public static void main(String[] args) wird automatisch von der Java-Laufzeitumgebung ausgeführt, wenn du mit java NameDerHauptklasse deine Hauptklasse in der Laufzeitumgebung ausführst. Eventuelle Kommandozeilenparameter werden dabei als "args" zur Verfügung gestellt. In der main wird normalerweise eine Instanz der Hauptklasse erstellt, und dann geht es von da aus weiter. Du kannst die main-methode auch in einer separaten Testklasse einbauen, und von dort aus benötigteInstanzen erstellen.
In deinem Fall könntest du in der main z. B. eine Instanz von Person erstellen und deren Eiogenschaften dan wieder ausgeben.
Schreib doch mal, was du erreichen möchtest, bzw. was passsieren soll, wenn du den Befehl "java Person" aufrufst.
 

Zurück
Oben