Hallo ich habe folgendes Problem hoffe inständig das mir jemand helfen kann:
Eigentlich habe ich mit Java überhaupt nix am Hut, doch momentan sitze ich an einem Projekt, bei dem ein java programm ein modul steuert auf dem eine xml-datei abgelegt wurde. Das problem ist versuche ich die bereits vorhandene .jar - Datei zu öffnen kommt nur die Fehlermeldung "Failed to load mein class manifest from..." - Verzeichnis eben. Der Informatiker der das Programm geschrieben hat, hatte mir zuvor versichert dass das programm ohne weiteres ausführbar sei doch jetzt so etwas!
Auch beim googeln des fehlers bin ich nicht fündig geworden - zumindest nicht in dem Maße das es verständlich für mich wäre - es gibt zwar anhaltspunkte dass ich irgendetwas hinzufügen soll aber ich kann das programm nicht einmal mit java eclipse öffnen ist das normal?
Wie gesagt, ich hatte noch nie vorher mit Java zu tun und daher nicht den blassesten Schimmer und die einarbeitung ohne irgendwelche bücher ist einfach zu zeitintensiv - deswegen hoffe ich dass mir jemand helfen kann einfach nur die java Datei zum laufen zu bringen, da ich den informatiker einfach nicht mehr erreiche und das Projekt abschließen möchte (ich war für die elektronik zuständig) - vielen Dank im vorraus!!!
Jar-Files können (müssen aber nicht) neben den eigentlichen Klassen im Manifest Zusantzinformationen enthalten, z.B. den Namen einer bestimmten Klasse, die eine main-Methode implementiert und damit den Einstiegspunkt in die Anwendung definiert. Enthält ein Jar-File diese Information, dann kann man das Programm mit java -jar NameDesJarFiles.jar starten. Enthält das Jar-File diese Information nicht (darauf deutet die Fehlermeldung hin), dann muss man den Namen der Klasse kennen, in der die main-Methode implementiert ist. Man verwendet dann nicht die "-jar"-Option, sondern gibt beim Start einfach den Namen der Klasse an (in diesem Fall muss das Jar-File im Classpath sein, was man z.B. mit der "-cp"-Option bewerkstelligen kann): java -cp NameDesJarFiles.jar NameDerKlasse
danke für die prompte antwort, aber leider kann ich mit dieser Information nicht sehr viel anfangen... soll ich die datei umbennen mit cp vornedran? Den Klassennamen weiß ich leider auch nicht...
Nein. "-cp" ist ein Parameter beim Aufruf der VM. Wie startest du das Programm im Moment? Per Doppelklick? Das geht nicht so einfach, wenn das Jar-File im Manifest nicht die notwendige Information hinterlegt hat.
Das ist schlecht, wenigsten den hätte der Entwickler hinterlassen dürfen. Wie heisst denn das Jar-File? Jar-Files kann man auch mit den gängigen Entpackern auspacken und so erkennen, welche Klassen drinstecken. Welche davon die Main-Methode implementiert, weiss man zwar immer noch nicht, aber vielleicht sind die Namen ja eindeutig genug.
Also das Programm heißt schlicht und einfach abc_timer.jar und sollte normalerweise per Doppelklick zu öffnen sein, da auch für Hinz und Kunz das Programm zugänglich sein sollte. Ich entpacke mal die datei mal schauen ob ich damit etwas anfangen kann...
abc.class, About$1.class, About.class, und noch einige mehr. ich vermute, dass sie nicht unbedingt daraus erkennen können welche davon die main-methode implementiert...? hat diese denn vielleicht ein bestimmtes kürzel?
Nein, einen bestimmten Namen muss die Klasse nicht haben. Die Klassen mit einem Dollar-Zeichen im Namen scheiden aus.
Normalerweise würde man die Klasse wohl entweder wie das Programm nennen oder auch Main.
Wenn in der Liste kein entsprechender Kandidat auftaucht, dann hilft wohl nur ausprobieren (oder Dekompilieren, aber das ist auch nicht ganz trivial für "Nur-Anwender")
okay, am ehesten kommt dann wohl abc.class bzw. BTKitBrowser.class in frage eine dieser dürfte es wohl sein.
Ich hoffe, falls es keine umstände macht, dass sie mir erklären können wie das mit dem ausprobieren funktioniert/dekompilieren funktioniert? wäre sehr verbunden!
Unter Windows? Eingabeaufforderung öffen, per CD in das Verzeichnis wechseln, in dem abc_timer.jar liegt, und dann für jede auszuprobierende Klasse java -cp abc_timer.jar NameDerKlasse eingeben. Beim Namen der Klasse muss das ".class" weggelassen werden. Sofern die Class-Files im Jar-File innerhalb von Ordern / Unterverzeichnissen liegen, dann sind diese Unterverzeichnisse Bestandteil des Namens und müssen ebenfalls angegeben werden (allerdings mit Punkten als Trenner).
Bsp.: das Jar-File enthält XY.class im Unterverzeichnis com\eine\tolle\firma\abc, dann müsste man an der Konsole java -cp abc_timer.jar com.eine.tolle.firma.abc.XY eingeben.
prinzipiell kein ding, aber a) verfüge ich - abgesehen vom internet - über keine möglichkeit mich reinzulesen da weder mir keine fachbücher zur verfügung stehen und b) sollte das programm bis morgen 12 Uhr MEZ laufen - mehr als googeln ist in ein paar Tagen vorbereitung nicht drin - jedenfalls wüsste ich nicht wo ich ansetzen soll...
Der NoClassDefFoundError bedeutet, dass die angegebene Klasse nicht im Classpath gefunden wurde. Der Classpath ist eine Sammlung von Stellen, an denen die Java-VM nach Klassen suchen kann (ähnlich wie die PATH-Umgebungsvariable für DOS und Windows. die ja angibt, wo das System irgendwelche Binaries suchen soll).
Entweder eine Batch-Datei schreiben, die den Aufruf macht und dann diese Batch-Datei per Doppelklick starten oder das Jar-File entpacken, die Manifest-Datei erstellen und das Jar-File neu erzeugen. Dazu gibt einen Punkt in der FAQ.