Kobey Geschrieben 13. Oktober 2010 Geschrieben 13. Oktober 2010 Hallo folgendes Problem, ich möchte java bei mir in der Arbeit programmieren. Jetzt hab ich jdk1.6 unter c:\jdk.6 installiert. Dann hab ich die Benutzervariable JAVA_HOME gesetzt und bei der Systemvariable path den pfad zum bin-Ordner eingefügt. Nur um auszuprobieren hab ich folgende Class erstellt: class HelloWorld { public static void main (String []args) { System.out.println("HelloWorld"); } } die datei hab ich im jdk.6 ordner im Class-Ordnergespeichert. Wenn ich nun im CMD die datei auführenmöchte kommt folgender Fehlercode (Das Kompilieren funktioniert ja sogar ....) C:\jdk.6\Class>javac HelloWorld.java C:\jdk.6\Class>java HelloWorld Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld Caused by: java.lang.ClassNotFoundException: HelloWorld at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) Could not find the main class: HelloWorld. Program will exit. Ich weiß, dummes Problem, bin allerdings Anfänger und naja. Würds eben gerne lernen lg kobey _______________________________________________________________ Zitieren
kingofbrain Geschrieben 13. Oktober 2010 Geschrieben 13. Oktober 2010 Ist im Verzeichnis C:\jdk.6\Class die Datei HelloWorld.class vorhanden? Wenn nein, wohin hast Du die dann kompiliert? Die brauchst Du zum Ausführen mit "java". Schöne Grüße, Peter Zitieren
Kobey Geschrieben 13. Oktober 2010 Autor Geschrieben 13. Oktober 2010 jo, HelloWorld.java ist im verzeichnis Class Kobey _________________________________________________________________ Zitieren
kingofbrain Geschrieben 13. Oktober 2010 Geschrieben 13. Oktober 2010 Hmm, mit Deiner Beispielklasse funktioniert es bei mir. Es sollte zwar nicht passieren, aber vielleicht ist ja der Classpath verdreht und nimmt das aktuelle Verzeichnis nicht mit auf. Probier mal folgendes: java -cp . HelloWorld Das setzt den Classpath, also den Pfad (die Pfade), unter denen nach Klassen gesucht wird, explizit auf das Verzeichnis, in dem Du dich befindest. Dann musst Du natürlich das Kommando auch aus C:\jdk.6\Class heraus ausführen. Peter Zitieren
Kobey Geschrieben 13. Oktober 2010 Autor Geschrieben 13. Oktober 2010 ok habs jetzt mal mit java -cp . HelloWorld ausprobiert, und da gehts einwandfrei. Aber die Pfade müssten normal auch alle stimmen... Noch mal zur sicherheißt, was muss ich bei den Umgebungsvariablen alles machen? (Nur zur Kontrolle ob ich das richtige getan habe: zur variable "path" habe ich c:\jdk.6\bin angehängt und ich habe die Benutzervariable JAVA_HOME mit dem link c:\jdk.6 angelegt.) lg Kobey __________________________________________________________________ Zitieren
kingofbrain Geschrieben 13. Oktober 2010 Geschrieben 13. Oktober 2010 Die von Dir genannten Pfade haben damit nichts zu tun. Es könnte sein, dass es bei Dir eine global definierte Systemvariable CLASSPATH gibt, die auf irgendwas zeigt. Manche Java-Anwendungen haben das früher gemacht, damit ihr classpath gepasst hat. Das ist aber absolut schlechter Stil und sehr fehleranfällig. Schöne Grüße, Peter Zitieren
etreu Geschrieben 13. Oktober 2010 Geschrieben 13. Oktober 2010 Schon mal mit "public class HelloWorld" probiert? Zitieren
Kobey Geschrieben 13. Oktober 2010 Autor Geschrieben 13. Oktober 2010 ohhh jetzt gehts Hab das Public nich drin gehabt... is das eigl üblich, da public vor zu schreiben? Vielen dank an euch und besonders an etreu lg kobey __________________________________________________________________________ Zitieren
etreu Geschrieben 13. Oktober 2010 Geschrieben 13. Oktober 2010 Wenn es deine Hauptklasse (mit der main-Methode) ist, dann schon. Deswegen hat auch der Umweg mit Classpath geholfen. Ohne public hatte die Klasse den modifier package und konnte deswegen nur aus dem Verzeichnis aufgerufen werden. Zitieren
kingofbrain Geschrieben 13. Oktober 2010 Geschrieben 13. Oktober 2010 Hallo etreu, an das public habe ich als erstes auch gedacht, es aber wieder verworfen, weil es bei mir funktioniert hat (Ubuntu 10.04 und jdk6.1.x) - ohne explizite Angabe von "-cp". Weißt Du, ob das an meiner Umgebung liegt? Schöne Grüße, Peter Zitieren
etreu Geschrieben 13. Oktober 2010 Geschrieben 13. Oktober 2010 Vielleicht hast du "." schon im CLASSPATH drin? Ubuntu funktioniert zwar schön, ist aber nicht immer transparent, wenn man "unten" was machen möchte. Wie sehen denn deine Umgebungsvariablen aus? Zitieren
kingofbrain Geschrieben 14. Oktober 2010 Geschrieben 14. Oktober 2010 Du hast recht, dass die Anwenderfreundlichkeit bei Ubuntu einher geht mit einer teilweisen Unsichtbarkeit von Einstellungen. Allerdings ist meine Java-Umgebung nicht über einen Paketmanager installiert, sondern manuell. Deshalb habe ich auch keine globale Variable CLASSPATH definiert, für den ersten Test auch keinen cp, den ich der VM mitgegeben hätte. Wenn, dann müsste es an der Implementierung des JDK für Linux liegen (ich habe die .bin installiert). Naja, hätte mich nur interessiert, aber in meinen Anwendungen ist dieses Phänomen irrelevant, weil ich mit den Modifiern jeweils explizit etwas ausdrücken möchte. Eine Startklasse für eine Anwendung ist meinem Verständnis nach immer öffentlich. Schöne Grüße, Peter Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.