Ich habe weder über Google unbrauchbare Ergebnisse gefunden, sowie auch über die Board SuFu nichts. Ich hoffe mal das Präfix ist richtig, mir fiel kein besseres ein ...
Mein Problem ist, dass ich gerne eine *.java Datei nach einem Doppelklick öffnen möchte. Also nachdem ich zweimal drauf geklickt habe, soll sich die VM öffnen und mir den Inhalt abspielen.
Meine Frage: Wie mache ich das und welchen Dateityp muss die Java-Datei haben?
Das geht nicht. Die java Datei muss erst noch kompiliert werden. Dann hast du eine class Datei. Aber auch die kann man nicht so ohne weiteres per Doppelklick ausführen. Das geht mit einem Jar wenn das Filehandle im BEtriebssystem richtig registriert ist. Dazu dein Projekt in Eclipse als "Runable Jar" exportieren.
Leider gibt es ein Problem:
Als erstes rechtsklicke ich auf mein *.java File, dann wähle ich "Export ..." aus. Dann "Runnable JAR File" und "Next". Dann den Speicherort, aber bei "Launch configuration" steht nichts drinnen. Auch durch einen Klick auf den Pfeil daneben kann ich nichts auswählen. So kann ich weder "Next" noch "Finish" drücken. Was ist da das Problem?
Du musst eine Launch Configuration anlegen. Eclipse tut dies automatisch, wenn du das Programm das erste Mal in der IDE startest. Anschließend ist die Konfiguration im Export-Dialog verfügbar.
Was das mit dem Löschen und Umbenennen soll habe ich jetzt nicht verstanden.
Hast Du mal versucht das jar via Konsole zu starten?
Code:
java -jar deinArchiv.jar
Aufgrund der Fehlermeldung würde ich aber vermuten, dass der Eintrag in der Manifestdatei fehlerhaft ist, denn Deine Klasse heisst nicht Klasse2 sondern Paket2.Klasse2
Wobei in Deinem Fall, wenn es funktioniert gar nicht zu sehen sein sollte, da Executable jars i.d.R mit javaw gestartet werden, und die Konsole (also das System.out.print...) nicht angezeigt wird.
Hab ich da was falsch verstanden? Als die Datei noch ne *.java war, musste sie immer gleich heißen, wie die class. Da aber meine class nicht "Klasse2.r" heißt und eine Klasse2.java schon existiert, muss ich das machen ...
Wobei in Deinem Fall, wenn es funktioniert gar nicht zu sehen sein sollte, da Executable jars i.d.R mit javaw gestartet werden, und die Konsole (also das System.out.print...) nicht angezeigt wird.
java.lang.NoClassDefFoundError: Paket2/Klasse2
Caused by: java.lang.ClassNotFoundException: Paket2.Klasse2
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)
Hab ich da was falsch verstanden? Als die Datei noch ne *.java war, musste sie immer gleich heißen, wie die class. Da aber meine class nicht "Klasse2.r" heißt und eine Klasse2.java schon existiert, muss ich das machen ...
Verstehe nicht was Du meinst
- eine .java Datei muss so heißen wie die darin definierte Klasse - korrekt.
- wenn die .java Datei Bestandteil eines packages ist, muss Sie in einem Verzeichnis liegen, das genauso heißt wie der package-Name. Das daraus erzeugte class-File bzw. die kompilierte Klasse wird dann über packageName.KlassenName identifiziert.
- das jar-File kann heißen wie es will.
javaw startet die VM ohne Konsole, d.h. ein System.out. bleibt für den Anwender unsichtbar. Einzig GUI Komponenten werden angezeigt.
Wenn Du jar-Files die keine GUI enthalten per Doppelklick inkl. der Konsole starten willst, dann musst die Dateiverknüpfung für .jar Dateien auf java -jar meinArchiv.jar ändern. (Nehme an Du verwendest Windows --> java -jar "%1")
Ansonsten sollte das jar einfach aus Eclipse zur exportieren sein.
Rechtsklick auf die Klasse oder das Projekt --> Export... --> "JAR file" auswählen --> Next --> das Exportverzeichnis auswählen --> Next --> Next --> Main class per Browse auswählen --> Finish
java.lang.NoClassDefFoundError: Paket2/Klasse2
Caused by: java.lang.ClassNotFoundException: Paket2.Klasse2
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)
Eieiei... Das ist so einiges nicht wie es sein sollte
Ich hab dir mal ein Beispiel für ein laufendes Projekt zusammengestellt. Importier das in dein Eclipse Workspace und probier es noch mal mit dem Export...
Dankeschön. Auch an alle, für die viele Geduld. Ich weiß, ich hab viele Probleme mit Java.
@fassy
Wäre natürlich zu schön um wahr zu sein:
Eclipse kann die neue Datei nirgends zuordnen. D.h. es wird in dieser linken Spalte nicht angezeigt und somit kann ich es auch nicht zum exportieren auswählen ;(
du hast eine Konsolenanwendung geschrieben. Die kannst du nicht einfach doppelklicken, ausser du schreibst ein Skript, dass eine Shell (Eingabeaufforderung) startet und z.b. java -jar Desktop/Projektfassy.jar startet. Dann erscheint eine Shell die "Hallo Welt ausgibt".
Deine Beispiel Datei ist eine .jlnp, mit grafischen Elementen.
Es gibt einige Compiler, die dir aus deinem Sourcecode eine .exe compilieren, die dann per Doppelklick ausführbar sind. Vorausgesetzt, wir sprechen von Windows. Dies ist aber mMn. nicht sinnvoll, da du eine Konsolenanwendung geschrieben hast. Via Google findest du a) Informationen über den .exe Compiler und b) über die Möglichkeit deine Konsole via Batch Datei mit einem Doppelklick zu öffnen. Ich denke, b) wäre sinnvoller in deiner Situation.
Hab keine Ahnung von .jlnp, aber ganz so einfach wird das nicht funktionieren.
Eine EXE funktioniert nur unter Windows. Für andere Betriebssysteme müsste man dann wieder einen anderen Compiler suchen, der daraus (pseudo?)nativen Code macht. Eine Shell gibt es unter jedem Betriebssystem, allerdings mit verschiedenen Befehlen und Syntax. D.h. dort müsstest du für jedes Betriebssystem ein eigenes Skript schreiben, was aber auch nicht so sonderlich schwer ist. Unter Windows wäre das eine .bat (batch-datei).
Falls ich Mist erzähle, berichtige mich jemand, aber so ungefähr haut das schon hin. Flexibilität hat eben auch seinen Preis.