NetBeans Projekt im Terminal starten

nossek

Aktives Mitglied
Hallo,

nachdem ich meine Java-Gehversuche bislang immer in NetBeans kompiliert und ausgeführt hatte, wollte ich mal probieren, in NetBeans erstellten Code im Terminal (Mac OS 10.6) zu starten.

Dafür habe ich ganz von vorne angefangen und in Netbeans ein HelloWorld Projekt (name "Hello")geschrieben, wo der ganze code (natürlich) in einem File Main.java steht. Die von NetBeans erzeugte binary-Datei heißt natürlich Main.class - so weit so gut.

Versuch 1:
- im Terminal mit cd in das Verzeichnis wechseln, in dem die Datei Main.class liegt OKAY
- java Main ausführen GEHT NICHT
Die Fehlermeldung beginnt so:
Exception in thread "main" java.lang.NoClassDefFoundError: Main (wrong name: hello/Main)

Versuch 2:
- ins Verzeichnis gewechselt, wo Main.java liegt OKAY
- mit javac Main.java kompiliert OKAY (in dem Verzeichnis liegt jetzt eine Main.class)
- java Main ausführen geht nicht, selbe Fehlermeldung wie bei Versuch 1.

Versuch 3:
- In der Datei Main.java die Zeile
Java:
package hello;
auskommentiert.
- javac Main.java OKAY
- java Main OKAY, das Programm wird ausgeführt.

Zuletzt habe ich dem NetBeans Projekt noch ein File mit der Klasse SayHello mit einer statischen Methode hinzugefügt, die dann in der main-methode aufgerufen wird.
Jetzt geht noch nicht mal mehr das compilieren mit javac, Fehlermedlung beginnt so:
Main.java:9: cannot find symbol
symbol : variable SayHello
Wenn ich wiederum in den Files Main.java und SayHello "package hello" auskommentiere funktioniert alles.

Das hat wohl irgendwas mit dem classpath zu tun. Es wird ja noch komplizierter, wenn ich auf verschiedene Packages verteilte eigene Klassenbibliotheken verwenden will. Es ist doch hoffentlich nicht so, daß ein Nutzer erstmal alle möglichen Classpaths setzten muß, bevor er eine Application benutzen darf?!?

Bitte schimpft nicht mit mir, habe stundenlang gegoogelt und VIEL ZUVIEL Text gefunden, aber nichts das mir geholfen bzw. ich verstanden hätte. ;(

Eigene Klassenbibliotheken schreiben und als Package in andere Projekte einbinden hab ich INNERHALB von Netbeans schon geschafft. Trotzdem habe ich offensichtlich das Konzept der Packages gedanklich noch nicht durchdrungen.

Kann mir jemand auf die Sprünge helfen?

Ziemlich abgegesseben Gruß

nossek
 
Lies dir mal javac - Java programming language compiler durch, da sind auch paar Beispiel dabei, dir dir weiterhelfen.

Es ist doch hoffentlich nicht so, daß ein Nutzer erstmal alle möglichen Classpaths setzten muß, bevor er eine Application benutzen darf?!?

Ein Nutzer soll ja das Programm auch nicht kompilieren, sondern nur ausführen. Wenn du es also in z.B. jar packst, dann braucht sich der Nutzer um nichts zu sorgen.
 
Guten Morgen und vielen Dank XHelp.

Okay, die Schaltfläche "clean and build project" erzeugt im Projektordner eine Datei "Projektname.jar", die im Projektordner im Verzeichnis "dist" liegt.

Die kann ich im Terminal dann mit
cd VerzeichnisInDemDieJarDateiLiegt
java -jar Projektname.jar
starten

wunderbar!

Wenn das Programm kein Konsolenprogramm ist sondern ein GUI hat, kann ich es sogar mit einem Doppelklick auf Projektname.jar starten - noch besser!

Oben genannter Fall bezieht sich erstmal auf ein Projekt, wo alle verwendeten eigenen Klassen im Projekt selbst liegen.

Wenn ich eine eigene Klassenbibliothek verwende, indem ich sie (als Jar-Datei) im "Hauptprojekt" über Project Properties->Libraries->Add Project einbinde, und dann im Hauptprojekt "clean and build project" mache, dann enthält das Verzeichnis "dist" ein Unterverzeichnis "lib", in dem dan die jar-Datei von der eingebundenen eigenen Library liegt. Wenn man dann das Prorgamm startet, findet es alles was es braucht und alles wird gut.

EDIT: "To distribute this project, zip up the dist folder (including the lib folder)
and distribute the ZIP file." steht im ReadMe.txt im dist folder.

Da stellt sich gleich die Frage: Wieso tut BetBeans nicht gleich alle für das Projekt benötigten Klassen in EINE jar Datei? Mögliche Antwort: Damit man die Klassenbibliothek austauschen kann, ohne das das Hauptprojekt neu kompiliert werden muß.

Habe ich die Zusammenhänge einigermaßen zutreffend dargestellt?!
 
Zuletzt bearbeitet:

Zurück
Oben