Java: Kann Programme nicht ausführen

Hallo,
ich versuch mal alle Informationen zusammenzutragen.

Habe j2sdk-1_4_2-nb-3_5_1-bin-windows.exe in das Verzeichnis H:\Programme\j2sdk_nb installiert.
Der .bin- Ordner ist somit hier: H:\Programme\j2sdk_nb\j2sdk1.4.2\bin

Habe dann anschließend bei den Umgebungsvariablen unter Path folgendes manuell hinzugefühgt ( Alles was in rot steht):
H:\Programme\j2sdk_nb\j2sdk1.4.2\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;H:\Programme\j2sdk_nb\j2sdk1.4.2\bin;"H:\Programme\Norton SystemWorks\Norton Ghost\";h:\Programme\Support Tools\;H:\PROGRA~1\SECUREFX

Zum schreiben benutzt ich NetBeans IDE 3.5.1, was hier installiert ist:
H:\Programme\j2sdk_nb\netbeans3.5.1\bin\runidew.exe

Während dieses Programm läuft:
Code:
public class Test
{
 public static void main (String[] args)
  {
    System.out.println ("         i");
    System.out.println ("       i**i");
    System.out.println ("      i**i**i");
    System.out.println ("    i**i**i**i");
    System.out.println ("   i**i**i**i**i");
    System.out.println ("i**i**i**i**i**i**i");
    System.out.println ("         *");
    System.out.println ("         *");
  }
}

läuft dieses nicht:
Code:
class GanzeZahlen 
{
 public static void main(String args[]) {
 int zahl; // speichert die Benutzereingabe
 System.out.print("Geben Sie eine Zahl ein: ");
 zahl = Eingabe.inteingabe();
 System.out.println("Ihre Zahl: " + zahl);
 }
 }

Eingabe ist im selben Verzeichnis als .class und .java mit folgendem Quelltext:
Code:
import java.io.*;
public class Eingabe {

  public static int inteingabe(){
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    try{
      return Integer.parseInt(in.readLine());
    } catch(Exception e){
      System.err.println("\ninvalid format !?!");
    }
    return Integer.MIN_VALUE;
  }

  public static String stringeingabe(){
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    try{
      return in.readLine();
    } catch(Exception e){}
    return null;
  }

  public static double doubleeingabe(){
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    try{
      return Double.parseDouble(in.readLine());
    } catch(Exception e){
      System.err.println("\ninvalid format !?!");
    }
    return Double.MIN_VALUE;
  }
}

Beim Kompilieren gibts keine Fehler nur unter Execute. Bei GanzeZahlen bekomm ich dann die Fehlermeldung:
Code:
java.lang.NoClassDefFoundError: Wi-Inf/GanzeZahlen (wrong name: GanzeZahlen)
        at java.lang.ClassLoader.defineClass0(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:537)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
Exception in thread "main"

Hab ich was bei der Path setzung falsch gemacht?
THX für eure Hilfe.
 
Einen Fehler hab ich entdeckt:

Klassen in Java sind abstract .. d.h. Du kannst mit ihnen nicht direkt arbeiten. Um mit einer Klasse arbeiten zu koennen, musst Du eine Instanz der Klassen bilden. (new)

Eingabe eingabe = new Eingabe();
zahl = eingabe.inteingabe();

Allerdings sagt dies IMO die Fehlermeldung nicht aus ... Zeigt Dein CLASSPATH auch auf das Verzeichnis, wo GanzeZahlen und Eingabe stehen?
 
@Deef: Das erste was du gesagt hast, stimmt so leider nicht ganz. Alle Methoden in Eingabe sind static. D.h. sie existieren schon bevor es eine instanz des Objektes gibt.
Das mit der CLASSPATH-Variablen kann ich mir leider auch nicht vorstellen, weil sich Eingabe im selben Verzeichniss befindet.
 
Original von Deef
Klassen in Java sind abstract .. d.h. Du kannst mit ihnen nicht direkt arbeiten.

im prinzip hast du schon recht, nur sind in java nicht alle klassen abstract
das is der falsche begriff (besser wäre: klassen sind objekte und man braucht eine instanz davon um mit dieser zu arbeiten, wenns nicht grad static ist)
abstracte klassen haben das schlüsselwort abstract und von diesen klassen kann man keine instanzen erzeugen (weil die abstracten funktionen dort nur deklariert aber nicht implementiert werden)
man kann sie nur als basisklasse für eine andere klasse verwenden und dort muss man dann alle abstracten funkionen implementieren

@Quetzalcoatl
versuch mal den . zum CLASSPATH hinzuzufügen
damit auch im aktuellen arbeitsverzeichnis nach klassen gesucht wird
und du musst den java befehl dann auch in dem ordner ausführen wo die class dateien liegen
 
Original von Quetzalcoatl

Beim Kompilieren gibts keine Fehler nur unter Execute. Bei GanzeZahlen bekomm ich dann die Fehlermeldung:
Code:
java.lang.NoClassDefFoundError: Wi-Inf/GanzeZahlen (wrong name: GanzeZahlen)
        at java.lang.ClassLoader.defineClass0(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:537)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
Exception in thread "main"
Ja - java.lang.NoClassDefFoundError - das sagt alles :)

Du hast zwar die Umgebungsvariablen für deine Javainstallation gesetzt, doch fehlt dir explizit das Verzeichnis in welchem du den Code ausfürhst.

Du hast 2 Möglichkeiten:

a.) dein "Working Directory" in welchem deine Projektfile liegen den globalen Pfaden hinzufügen
b.) die beiden .java Dateien in ein "package" du schieben.

Methode B ist vorzuziehen damit das Programm auch auf/in anderen Rechnern/Verzeichnissen läuft ;)

Schreibe dazu ganz oben (noch vor den imports!) in deine beiden Java-Files etwa folgendes:
Code:
package myproject;
Nun sollte das klappen ;)


Edit:
Bei mir klappt das Programm ansonsten so wie es ist einwandfrei:
Code:
Geben Sie eine Zahl ein: 23
Ihre Zahl: 23
 
Original von typecast
Das mit der CLASSPATH-Variablen kann ich mir leider auch nicht vorstellen, weil sich Eingabe im selben Verzeichniss befindet.
Das stimmt so leider nicht unbedingt. Meistens klappt so etwas aus einer Entwicklungsumgung heraus ohne expliziten Classpath da das Arbeitsverzeichnis standardmäßig mit in den Classpath genommen wird.

Edit: typecast hat allerdings dahingegen recht dass es auch mit einem Import von Eingabe allein funktionieren sollte ;)
 
Meistens klappt so etwas aus einer Entwicklungsumgung heraus ohne expliziten Classpath da das Arbeitsverzeichnis standardmäßig mit in den Classpath genommen wird.
Das hab ich eben auch vermutet.

Ich habe jetzt einfach bei mir auf der Platte ein Ordner erstellt für das Projekt und den Classpath neu auf den Ordner gesetzt. Die Codes laufen jetzt.
THX nochmal für eure Hilfe.


Was mir nur grad auffällt ist das ich Plötzlich keine Java Applets mehr im Browser ausführen kann.
Gibt es eine Möglichkeit die Classpath für das ganze System zu setzen?
 
Zurück
Oben