Eclipse erkennt Main-Datei nicht

Ich schreibe derweil ein Programm in Java und nutze dazu Eclipse. Vorhin habe ich leider ungeschickt die Maus weg geschubst und habe anscheinend zwei Mail geklickt, welche Maustasten, weiß ich nicht. Auf jeden Fall war der Courser links in dem sogenannten „PackageExporter“. Das ist das Ding, in dem man die Projekte, Ordner, Dateien usw. sieht und auswählt.

Auf jeden Fall ist dann aus dem Ordner „src“ damit das Objekt „(default package)“, in dem all meine Dateien zu finden sind, verschwunden. Ich konnte also keine Dateien öffnen. Die Dateien, die ich bereits geöffnet hatte, blieben offen uns sichtbar. Auch in dem Ordner „src“ (per Dateibrowser habe ich nachgeschaut) blieben alle Dateien erhalten. Aber wie gesagt konnte ich keine neuen Dateien öffnen.

Glücklicherweise verwende ich Dropbox (Infos dazu gibt es auf dropbox.com). Das ist super, denn damit konnte ich nachsehen, welche Dateien geändert wurden. Die Datei „.classpath“ im Projektverzeichnis wurde verändert. Ich habe genauer nachgesehen und festgestellt, dass diese Datei noch nie zuvor geändert wurde, also sehr treffend. Das war ihr Inhalt nach dem Fehler:

<?xml version="1.0" encoding="UTF-8"?>

Wiederhergestellt habe ich die Ursprungsdatei, welche jetzt im Moment auf meinem Computer gespeichert ist und diesen Inhalt hat:

<?xml version="1.0" encoding="UTF-8"?>

Das Problem scheint gelöst, es ist es aber nicht. Es ist mir nicht mehr möglich, das Projekt zu compilieren.

Also der Reihe nach: Ich klicke mit Rechtsklick auf das aktuelle Projekt und wähle „export“ aus. Im Ordner „Java“ wähle ich „Runnable Jar File“ aus. Dann klicke ich auf „next“. Ich wähle oben das Projekt aus, das ich compilieren will. Dann wähle ich aus, wo ich die JAR-Datei speichern will und wie sie heißen soll. Bei „Library handling“ wähle ich den obersten Punkt aus. „Save as ANT script“ aktiviere ich nicht. Dann klicke ich auf „finish“. Da die Datei bereits existiert bestätige ich, dass sie überschrieben werden soll. So weit alle normal, doch dann erscheint eine Fehlermeldung. Ich habe sie aufgenommen und „Details“ schon aufgeklappt: klick.

Also die Main-Methode konnte angeblich nicht gefunden werden. Aber die Methode public static void main(String[] args) befindet sich nach wie vor in der Datei „Main.java“. Ich bin ratlos.

Habt ihr Ideen, wie das Problem lösbar sein könnte?

Ok, als erstes ein kleiner Hinweis: In Eclipse selbst gibt es die Local History, mit der Du Ordner und Dateien wieder herstellen kannst, falls Du Änderungen loswerden möchtest. Nutze ich immer, wenn ich noch nichts in mein SCM eingecheckt hab (was nicht oft vorkommt).

Jetzt zu Deinen Problemen. Du kannst also Dein Projekt nicht kompilieren. Und Du kannst nicht in in JAR exportieren.

Das sind eigentlich zwei Dinge und Du solltest vielleicht erst das Kompilieren lösen. Dann wird sich das zweite Problem evtl von allein lösen.

Wie kompilierst Du und welche Fehlermeldung gibt es?

Ich habe etwas vergessen zu sagen, was ich eigentlich unbedingt sagen wollte: In der Dropbox war nur das Projektverzeichnis, nicht das ganze Eclipse-Verzeichnis, keine Einstellungen von Eclipse, nichtmal der ganze Workspace, sondern eben nur ein Ordner des Workspaces.

Ok, als erstes ein kleiner Hinweis: In Eclipse selbst gibt es
die Local History, mit der Du Ordner und Dateien wieder
herstellen kannst, falls Du Änderungen loswerden möchtest.

Wo finde ich das? Ich habe soeben kurz die Menüpunkte durchgeschaut und nur etwas gefunden, mit dem man Änderungen im Workspace rückgängig machen kann. Das war aber nicht das, was mir geholfen hat. Dort stand nur, welche Dateien ich manuell in den Workspace gepackt habe.

Jetzt zu Deinen Problemen. Du kannst also Dein Projekt nicht
kompilieren. Und Du kannst nicht in in JAR exportieren.

Das sind eigentlich zwei Dinge und Du solltest vielleicht erst
das Kompilieren lösen. Dann wird sich das zweite Problem evtl
von allein lösen.

Wie kompilierst Du und welche Fehlermeldung gibt es?

Na, ich denke in Eclipse ist compilieren und als JAR-Datei exportieren das selbe. Wie ich vorgehe habe ich ja bereits im Eröffnungsbeitrag beschrieben, aber soeben ist etwas merkwürdiges passiert:

Ich durchsuchte wegen der von dir genannten „Local History“ die Menüpunkte. Dabei stieß ich auf den weiter ausklappbaren Menüpunkt „Run History“ in „Run“. Ich habe 3 Projekte in Java, nur bei meinem aktuellen heißt die Hauptdatei auch „Main.java“. In dem Menüpunkt finde ich 2 Dateinamen. Aus Neugierde klickte ich auf „1 Main“. Es öffnete sich ein Fenster mit dem Java-Programm, das ich bis jetzt programmiert habe.

Damit war ich interessiert und wollte mehr ausprobieren. Ich klickte also erneut im Menü auf „Run“, diesmal aber auf den Punkt „Run“ („Run“ ist in „Run“ drin, nicht wundern :wink:). Wieder öffnete sich das Fenster mit meinem Programm.

Erneut klappte ich das Menü „Run“ aus, diesmal fuhr ich aber über „Run as“ und wählte „2 Java Application“ aus. Genug dem Erfolg, mir wurde eine Fehlermeldung anstelle des Fenster gezeugt:
Launch Error
Selection does not contain a main type

Selbiges geschieht, wenn ich mit Rechtsklick auf mein Projekt klicke, dort über „Run as“ fahre und „2 Java Application“ auswähle.

Programm verändern
Ich habe soeben einen Text, der einem beim Programmstart gezeigt wird verändert und das Programm laufen lassen (jetzt, wo ich weiß, wie es doch geht). Der Text wurde auch im Programm verändert, das ist also nichts aus der Vergangenheit gegriffenes, sondern die aktuelle Version. So gesehen muss Eclipse dafür ja noch compilieren können.

Ok, als erstes ein kleiner Hinweis: In Eclipse selbst gibt es
die Local History, mit der Du Ordner und Dateien wieder
herstellen kannst, falls Du Änderungen loswerden möchtest.

Wo finde ich das? Ich habe soeben kurz die Menüpunkte
durchgeschaut und nur etwas gefunden, mit dem man Änderungen
im Workspace rückgängig machen kann.

Du kannst auf beliebigen Dateien und Ordnern im Package Explorer, im Editor oder in anderen Views mit Dateiansichten einen Rechts-Klick auf die Ressource (so nennt Eclipse alle Dateielemente eines Projekts) machen und im Kontextmenü „Replace with…“ -> „Local History“ auswählen. Es gibt ein paar Fälle, in denen die History nicht mehr verfügbar ist, z.B. wenn man etwas aus seinem SCM auscheckt. Genau hab ich das noch nicht herausgefunden. Die Größe der Local History kannst du in den Workspace Preferences einstellen. Ich hab das immer deutlich höher eingestellt als der Eclipse-Standard - im Zweifelsfall will man aber sowieso eine Änderung wiederhaben, die einen Tag VOR dem Ende der Local History liegt… :-}

Wie kompilierst Du und welche Fehlermeldung gibt es?

Na, ich denke in Eclipse ist compilieren und als JAR-Datei
exportieren das selbe.

Denkst Du, ist es aber vielleicht nicht. Das Projekt kompilierst Du, in dem Du im Menü „Project“ -> „Clean“ und „Build“ auswählst. Ich zitiere die Einträge jetzt aus dem Gedächtnis, evtl heißen sie etwas anders. „Clean“ räumt alle Artefakte des letzten Builds weg, „Build“ erstellt sie neu. D.h. dort wird dann wirklich der javac gestartet und die .class in Deinem Ausgabepfad erstellt. Den kannst Du btw in den Projekteinstellungen sehen, wenn Du in die Einstellung „Java Build Path“ wechselst. Unterhalb der Source Folders steht auch der Output Path. Dort landen Deine kompilierten Klassen.

Der Export als JAR tut nichts anderes als dein Projekt in ein Archiv zu exportieren. Ob das jetzt startbar oder kompiliert ist, hängt von den Exporteinstellungen ab. Ich weiß gar nicht, ob man automatisch kompilieren lassen kann, wenn man exportiert, das ist aber auch egal, weil das zwei unterschiedliche Vorgänge sind. Ob das JAR startbar ist, hängt wieder davon ab, ob Du ein MANIFEST im JAR hast. Das kann man automatisch erstellen lassen oder nicht, ist aber auch nicht relevant.

Ich durchsuchte wegen der von dir genannten „Local History“
die Menüpunkte. Dabei stieß ich auf den weiter ausklappbaren
Menüpunkt „Run History“ in „Run“. Ich habe 3 Projekte in Java,
nur bei meinem aktuellen heißt die Hauptdatei auch
„Main.java“. In dem Menüpunkt finde ich 2 Dateinamen. Aus
Neugierde klickte ich auf „1 Main“. Es öffnete sich ein
Fenster mit dem Java-Programm, das ich bis jetzt programmiert
habe.

Das sind die sog. Launch Configurations, die Du anscheinend schon für dein Projekt angelegt hast. Normalerweise nutzt man das so:

Rechtsklick auf die Klasse mit der main-Methode, dann „Run as…“ -> „Java Application“ auswählen. Eclipse startet dann java mit der Klasse als Argument. Diese Launch Configuration kann man auch abspeichern und später wiederverwenden.

Erneut klappte ich das Menü „Run“ aus, diesmal fuhr ich aber
über „Run as“ und wählte „2 Java Application“ aus. Genug dem
Erfolg, mir wurde eine Fehlermeldung anstelle des Fenster
gezeugt:
Launch Error
Selection does not contain a main type

Ja, ist klar. Du hast anscheinend eine Launch Configuration gewählt, die nicht vollständig ist. Evtl ist Dir diese Datei kaputt gegangen oder Du hast sie ausversehen angelegt. Ich würde Dir folgendes empfehlen:

Einmal im Kontextmenü auf „Run as…“ -> „Run…“ klicken, damit der Konfigurationsdialog der Launch Configurations angezeigt wird. Anschliessend ALLE Launch Configurations löschen. Anschliessend Deine Klasse mit der main Methode raussuchen und die nochmal per „Run as…“ starten.

Achso, und ausserdem würde ich Dir empfehlen:

a) die Eclipse-Hilfe zu lesen bzw ein paar Hello World-Tutorials zu machen
b) Eclipse zu schliessen und Dein Programm auf der Kommandozeile starten

Es hilft, wenn man die Grundlagen versteht, bevor man sich die Arbeit von einer IDE abnehmen lässt.

Problem gelöst

Denkst Du, ist es aber vielleicht nicht. Das Projekt
kompilierst Du, in dem Du im Menü „Project“ -> „Clean“ und
„Build“ auswählst.

In „Clean“ gibt es kein „Build“. Alles wird sofort beim Speichern der Datei compiliert. Die .class-Datei wird dort gespeichert, wo man den Output ausgewählt hat, die .java-Datei da, wo man die Quellen ausgewählt hat. Per Export->Runnable JAR-File packt man sich alles in eine funktionsfähige .jar-Datei.

Der Export als JAR tut nichts anderes als dein Projekt in ein
Archiv zu exportieren. Ob das jetzt startbar oder kompiliert
ist, hängt von den Exporteinstellungen ab.

Ob Runnabler auswählt oder eben nicht…

Ich weiß gar nicht,
ob man automatisch kompilieren lassen kann, wenn man
exportiert, das ist aber auch egal, weil das zwei
unterschiedliche Vorgänge sind.

Compiliert wird schon beim Speichern, also ist es schon compiliert, wenn man es exportiert.

Das sind die sog. Launch Configurations, die Du anscheinend
schon für dein Projekt angelegt hast.

Müssen Standard sein, Konfigurationen habe ich nicht angelegt.

Einmal im Kontextmenü auf „Run as…“ -> „Run…“ klicken,
damit der Konfigurationsdialog der Launch Configurations
angezeigt wird. Anschliessend ALLE Launch Configurations
löschen. Anschliessend Deine Klasse mit der main Methode
raussuchen und die nochmal per „Run as…“ starten.

Habe ich nicht gefunden.

a) die Eclipse-Hilfe zu lesen bzw ein paar Hello
World-Tutorials zu machen

-.-

b) Eclipse zu schliessen und Dein Programm auf der
Kommandozeile starten

Ich starte mein Programm immer per Kommandozeile, da ich der Run-Funktion von Eclipse nicht mehr wirklich vertraue, seit sie mir einige Elemente nicht gezeigt hat, erst, als ich mit der Maus darüber gefahren bin, wo sie sein sollten. Dann sind sie plötzlich erschienen. Bei einem Start per Kommandozeile außerhalb von Eclipse hatte ich ein solches Problem noch nicht.

Es hilft, wenn man die Grundlagen versteht, bevor man sich die
Arbeit von einer IDE abnehmen lässt.

Die Grundlagen verstehe ich, es währe nur noch schöner, die IDE auch zu verstehen.

So, jetzt wundert man sich vielleicht darüber, was ich in dem Beitragstitel geschrieben habe, nämlich „Problem gelöst“. Ich habe ein bisschen herum probiert, auch das, was du mir empfohlen hast, schließlich habe ich dann einfach etwas getan, was ich mir eigentlich schon seit der Eröffnung dieses Themas gedacht habe. Ich dachte mir: Es hat funktioniert, an meinem Programm liegt es nicht, schließlich ist die Main-Methode unverändert geblieben. Es liegt bestimmt an irgendeiner Einstellung. Also habe ich kurzerhand das Projekt gelöscht. Anschließend habe ich Rechtsklick gemacht, dann „Import“, dann „Existing Project“ und habe mein Projektverzeichnis ausgewählt.Jetzt funktioniert alles, wunderbar, Problem gelöst. :smile:

In „Clean“ gibt es kein „Build“. Alles wird sofort beim
Speichern der Datei compiliert. Die .class-Datei wird dort
gespeichert, wo man den Output ausgewählt hat, die .java-Datei
da, wo man die Quellen ausgewählt hat. Per Export->Runnable
JAR-File packt man sich alles in eine funktionsfähige
.jar-Datei.

Ah, das hab ich dann wohl überlesen bzw hast Du im OP nicht benannt. Wenn man speichert, wird aber alles nur kompiliert, wenn Du im Menü „Project“ -> „Build automatically“ ausgewählt hast. Ich stelle das z.B. hin und wieder ab, weil das mit Virenscanner+vielen Buildern bei meinem gewohntheitsmässigem CTRL+S manchmal aufhält… %-)

Das sind die sog. Launch Configurations, die Du anscheinend
schon für dein Projekt angelegt hast.

Müssen Standard sein, Konfigurationen habe ich nicht angelegt.

Die legt Eclipse automatisch an, wenn du einmal im Kontextmenü „Run as…“ ausgewählt hast. Man kann sie zwar auch als Datei exportieren (was praktisch ist, wenn man sie für das Team im SCM ablegt), aber sonst speichert Eclipse die werweißwo. Irgendwo in den workspace-Einstellungen oder so.

a) die Eclipse-Hilfe zu lesen bzw ein paar Hello
World-Tutorials zu machen

-.-

Das war jetzt nicht als doofe Anmache gedacht, sondern damit Du den Ablauf Projekt kompilieren -> Launch Configuration auswählen -> Ergebnis sehen noch einmal durchläufst und alle Unklarheiten bzgl Kompilation, Start und anschliessend Export beseitigt sind. :wink:

b) Eclipse zu schliessen und Dein Programm auf der
Kommandozeile starten

Ich starte mein Programm immer per Kommandozeile, da ich der
Run-Funktion von Eclipse nicht mehr wirklich vertraue, seit
sie mir einige Elemente nicht gezeigt hat, erst, als ich mit
der Maus darüber gefahren bin, wo sie sein sollten. Dann sind
sie plötzlich erschienen. Bei einem Start per Kommandozeile
außerhalb von Eclipse hatte ich ein solches Problem noch
nicht.

Das Problem kenne ich auch. Deshalb stelle ich in meinen Launch Configurations meistens „Refresh after launch“ (oder ähnlich) so ein, dass das gesamte Projekt aktualisiert wird. Dann tauchen auch die neu angelegten Ressourcen automatisch im Project Explorer auf. Die Einstellung findest Du auf dem 2. oder 3. Tab, irgendwo dort kann man auch einstellen, ob das Projekt *vor* dem Start Launch Configuration kompiliert werden soll.

gedacht habe. Ich dachte mir: Es hat funktioniert, an meinem
Programm liegt es nicht, schließlich ist die Main-Methode
unverändert geblieben. Es liegt bestimmt an irgendeiner
Einstellung. Also habe ich kurzerhand das Projekt gelöscht.
Anschließend habe ich Rechtsklick gemacht, dann „Import“, dann
„Existing Project“ und habe mein Projektverzeichnis
ausgewählt.Jetzt funktioniert alles, wunderbar, Problem
gelöst. :smile:

Na gut, das kann man natürlich machen. Für mich ist das aber so wie Problemlösung durch Reboot. %-) Ich mache lieber den gleichen Fehler so lange, bis ich weiß wodran es liegt. Ich glaube nämlich daran, dass einen sowas immer einholt und man später viel mehr Aufwand zur Lösung hat.

Grundsätzlich bin ich aber auch der Meinung, dass man sein Projekt immer ausserhalb der IDE bauen sollte. Schon damit man auch wechseln kann und sich nicht zu sehr einbaut. Vielleicht solltest Du Dir gleich http://ant.apache.org/ anschauen, und für dein Projekt ein Buildskript erstellen. Das ist 1) eine gute Übung und 2) vermeidest Du dann die Probleme mit der IDE. Per Ant kann man auch eine Anwendung starten. Und Ant kann man natürlich auch über eine Launch Configuration in Eclipse starten… *g*