Kann ich vom Befehlszeilenprogramm ausführen, das von Eclipse erstellt wurde?
Mit Eclipse habe ich eine SWT Hello World Programm. Ich war in der Lage zu führen Sie dieses Programm aus Eclipse und es hat gut funktioniert.
In der "/home/myname/workspace/HelloWorldSWT" fand ich zwei Dateien: HelloWorldSWT.java und HelloWorldSWT.class. Ich wollte ausführen, das entsprechende Programm aus der Befehlszeile. Zuerst habe ich versucht, geben Sie "java HelloWorld" und ich bekam folgende Fehlermeldung:
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
at gnu.java.lang.MainThread.run(libgcj.so.90)
Caused by: java.lang.ClassNotFoundException: HelloWorld not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:./], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}
at java.net.URLClassLoader.findClass(libgcj.so.90)
at gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.90)
at java.lang.ClassLoader.loadClass(libgcj.so.90)
at java.lang.ClassLoader.loadClass(libgcj.so.90)
at gnu.java.lang.MainThread.run(libgcj.so.90)
Ich habe auch versucht diese "java -cp /home/roman/workspace/HelloWorld.HelloWorld". Als Ergebnis bekam ich folgende Fehlermeldung:
Exception in thread "main" java.lang.NoClassDefFoundError: loaded class HelloWorld.HelloWorld was in fact named HelloWorld
at java.lang.VMClassLoader.defineClass(libgcj.so.90)
at java.lang.ClassLoader.defineClass(libgcj.so.90)
at java.security.SecureClassLoader.defineClass(libgcj.so.90)
at java.net.URLClassLoader.findClass(libgcj.so.90)
at gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.90)
at java.lang.ClassLoader.loadClass(libgcj.so.90)
at java.lang.ClassLoader.loadClass(libgcj.so.90)
at gnu.java.lang.MainThread.run(libgcj.so.90)
Weiß jemand, was ich falsch mache? Vielen Dank im Voraus für jede Hilfe.
InformationsquelleAutor der Frage Roman | 2010-02-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gehen in die Debug-Perspektive, und wählen Sie das Programm, das Sie gerade ausführen (wo es heißt Termintated, Ausfahrt Wert... in der Registerkarte "Debuggen") mit der Rechten Maustaste, und wählen Sie "Eigenschaften", dort können Sie den ganzen command-line-Befehl, der wurde von eclipse.
Können Sie ausführen, derselbe Befehl in derselben dir eclipse hast (siehe "Konfigurationen Ausführen", Argumenten, Arbeitsverzeichnis) und es wird funktionieren.
InformationsquelleAutor der Antwort Persimmonium
Müssen Sie das Verzeichnis, in dem eclipse das speichern der HelloWorldSWT.class Datei in den Klassenpfad. Es wird definiert, wenn das Projekt erstellt wird, wie "bin", "build" oder "Klassen". Überprüfen Sie die Eigenschaften des Projekts oder die Suche HelloWorldSWT.class Datei.
Vorausgesetzt, es ist die
build
Verzeichnis im HelloWorldSWT Arbeitsbereich und die, die Ihre Klasse in keinem package (default package), sollte der Befehl sein:oder nur auf das Verzeichnis ändern und verwenden:
EDIT:
Die
-cp .
bedeutet, dass nur das aktuelle Verzeichnis verwendet, der nach dem class-Dateien. Sie müssen auch hinzufügen, alle Bibliotheken (JARs oder andere Verzeichnisse) von Ihrem Programm verwendet (Datenbank -, SWT, ...).Für mehr details können Sie haben einen Blick in die Dokumentation: Wie die Klassen zu Finden sind, Einstellen der Classpath und java-comand
InformationsquelleAutor der Antwort Carlos Heuberger
Habe ich einige Abhilfe, so nehmen Sie vollen Vorteil der Eclipse-Komfort. Unten ist was ich gefunden habe, und es funktionierte gut für mich. Hoffe, es wird helfen:
InformationsquelleAutor der Antwort foxwendy
Scheint mir, dass du nicht eine Klasse mit dem Namen HelloWorldSWT`, sondern eine Klasse mit dem Namen
HelloWorldSWT
in einem Paket namensHelloWorldSWT
(Sie können dies überprüfen, indem Sie auf die erste Zeile derHellowWorldSWT.java
- hier finden Siepackage HelloWorldSWT;
Wenn ja, gehen Sie in das übergeordnete Verzeichnis, und geben Sie
java HelloWorldSWT.HelloWorldSWT
Diese funktionieren würde.
InformationsquelleAutor der Antwort Riduidel
Ist es möglich, dass Sie nicht das laden der SWT-Bibliothek korrekt, und als Folge Ihre Klasse nicht geladen werden.
Die SWT-Bibliothek ist Teil der Gläser, die sind bereits geladen, wenn Sie starten Sie Eclipse, sind aber nicht geladen, im command-line-parameter. Hast du die Klasse ändern, Pfad entsprechend?
Hier ist ein Alter Artikel darüber, wie das zu tun diese Art von Sachen, die in älteren Versionen von Eclipse
http://www.ibm.com/developerworks/opensource/library/os-ecgui1/
Benötigen Sie unterschiedliche Gläser heute mit der neuesten version, fo Eclipse. Es könnte auch nach unten kommen, um ein einziges Glas.
Check-out die SWT-FAQ; zumindest für Mac Carbon, können Sie ein einzelnes Glas würde ich Wetten, dass Sie tun können, die für andere Plattformen.
Außerdem bin ich mir nicht 100% sicher, dass Sie können starten Sie Eclipse unter openJDK, das scheint der Fall zu sein auf Ihrer Plattform.
InformationsquelleAutor der Antwort Uri
Dies ist das problem, das verursacht wird, weil die JVM nicht in der Lage zu finden, die HelloWorld-Klasse wie Sie haben den Namen der Klasse HelloWorldSWT mit main-Methode. versuchen Sie, mit
java HelloWorldSWT
InformationsquelleAutor der Antwort GuruKulki
Nicht festgelegt haben classpath dann richtig.
Ich denke, es ist in der Regel günstiger zu haben, der IDE-build eine jar-Datei mit allen nicht-jre-libs enthalten und auszuführen, von der Befehl-Linie.
java-jar myprogram.jar
Das ist wirklich eine gute Frage, und die Bereitstellung von java-Anwendungen ist wirklich eine Kunst für sich. Sowohl die Zusammenstellung und Erfüllungsort ist - wenn nicht kompliziert - zumindest umständlich, wenn von hand durchgeführt. Aber Eclipse und anderen tools wie Netbeans kann Ihnen helfen, diese Aufgaben in einer einfachen Weise, und sogar Paket-ein Programm für Sie, so dass andere, die nicht diese tools verwenden, auch ausführen können die Programme problemlos.
InformationsquelleAutor der Antwort deleted
Wenn Sie möchten, um das Programm mit Kommandozeilen-Argumenten aus Eclipse heraus können Sie gehen, um zu Laufen->Ausführen-Konfigurationen, die bringen ein Fenster mit dem Programm, das Sie ausführen, sowie eine box, wo Sie können, geben Sie Argumente.
InformationsquelleAutor der Antwort Ian
Fand ich eine andere quick-and-dirty-Lösung, wenn Sie nur wollen, um zu sehen, eine Ausgabe auf der Kommandozeile. Aber das ist nicht eine gute Praxis langfristig!
Entfernen Sie die package-Deklaration im code (Eclipse beschweren sich und geben Ihnen ein rotes Kreuz, ignorieren, dass erste), z.B.
package hello;
Speichern.
Öffnen Sie Ihre Befehlszeile und navigieren Sie bis Sie in der src-Ordner (cd).
Kompilieren Sie die java-Datei, z.B.
javac HelloWorld.java
Ausführen der java-Klasse-Datei, z.B.
java HelloWorld
Sollte es funktionieren, solange Sie in das richtige Verzeichnis ohne package-Deklarationen im code! Die package-Deklarationen verursachen Sie Probleme..und Eclipse eingerichtet wird, um sicherzustellen, dass alles funktioniert, so dass ist, warum ist es in Ordnung die package-Deklarationen gibt. Eine alternative Lösung ist, um wirklich zu gehen und setzen Sie den classpath auf Ihre eigenen (die immer verwirrt mich jedes mal, wenn ich es zu tun habe, die ich nur selten tun).
InformationsquelleAutor der Antwort Kevin Lee