Veröffentlicht 13. Oktober 201014 j 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 _______________________________________________________________
13. Oktober 201014 j 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
13. Oktober 201014 j Autor jo, HelloWorld.java ist im verzeichnis Class Kobey _________________________________________________________________
13. Oktober 201014 j 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
13. Oktober 201014 j Autor 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 __________________________________________________________________
13. Oktober 201014 j 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
13. Oktober 201014 j Autor 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 __________________________________________________________________________
13. Oktober 201014 j 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.
13. Oktober 201014 j 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
13. Oktober 201014 j 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?
14. Oktober 201014 j 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
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.