# Lotto-Zahlgenerator -Applet kann nicht initialisiert werden!



## Guest (31. Okt 2004)

Hallo!
Ich bin noch sehr unerfahren in Java und habe nun als erstes Programm ein Lottozahlgenerator in einem Applet programmiert. Dieses Programm soll 6 ungleiche, zufällig erstellte Lottozahlen erzeugen und diese im Applet darstellen. Dazu habe ich folgenden Code geschrieben. Wenn ich das Applet jedoch mit Hilfe eines Appletviewers testen will, zeigt dieser die Fehlermeldung: "Applet nicht initialisiert!" Ausserdem tauchen noch gleiche Lottozahlen auf, was nicht sein soll. Falls jemand den Fehler entdeckt, bitte melden!!!!

Code: 
	
	
	
	





```
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;


//Lotto-Programm

public class lotto extends Applet {
 int[] zahlen;

  public void init() {
   zahlen=new int[6];
   setLayout(new BorderLayout());
   int z;
    
    for (int i=0;i<7;i++) {   
      z=(int)(48*Math.random()+1);
      
      for (int j=i-1;j>=0;j--) {    //Überprüfung auf Zahlengleichheit.. alle Zahlen vor der einzusetzenden w. überpr.
       while (zahlen[i]==zahlen[j]) z=(int)(48*Math.random());
      }
      zahlen[i]=z;
      System.out.println(z);

    }


  }
  
  public void paint(Graphics gc) {
   gc.drawString("Hallo!",20,20);
   String s = new String();


     for (int i=0;i<7;i++) {
       s=String.valueOf(zahlen[i]);
       gc.drawString(s,8,8);
     }


  }


}
```


----------



## Sky (31. Okt 2004)

1.) Als Anfänger sollte man 'klein' anfangen und nicht gleich mit einem Applet. Lieber ein bißchen "Kommandozeile"

2.) Wie lautet denn die Fehlermeldung? Gibt es einen Stack dazu?

3.) Du musst 'z' innerhalb deiner while-Scheife bei Ungleichheit in dein Array einfügen


----------



## Gast (31. Okt 2004)

Ich hab  schonmal so Konsole- Programme gemacht. Dies ist nur mein erstes Applet.

Was ist ein Stack??
Der Compiler meldet keine Fehler, aber im Browser wird nichts ausser einer grauen Fläche angezeigt!!!!


----------



## Beni (31. Okt 2004)

Such mal in deinem Browser nach der Java-Console. Wenn ein Fehler passiert sollte dort etwas geschrieben werden wie:



> Exception in thread "main" java.lang.NullPointerException
> at tutorial.Main.main(Main.java:14)


----------



## Gast (31. Okt 2004)

Komisch, wenn ich mit dem Mauszeiger über das Applet im Browser fahre, dann wird unten in der Statusleiste: class file "Datei4.class" not found oder so ähnlich angezeigt, obwohl sich die Datei Datei4.class in dem gleichen Verzeichnis befindet wie die html- Datei. Auch eine absolute Pfadangabe klappt nicht.


```
<HTML>
<Head>
<Title>Datei4-Applet</Title>
</Head>
<Body>
<H1>Datei4-Applet</H1>
<HR>
<Applet Code="Datei4.class" Width=400 Height=300>
</Applet>
<HR>
</Body>
</HTML>
```

Die Datei Datei4.BAk existiert jedoch nicht und wird beim compilieren auch nicht erstellt.

Noch etwas: Wo befindet sich im IE6 die Java- Konsole, ich habe sie nicht gefunden?


----------



## L-ectron-X (31. Okt 2004)

Datei4.class? Deine Quellcodedatei heißt doch _lotto.java._, oder nicht?

Im IE ist die Java-Console standardmäßig nicht aktiviert. Du aktivierst sie ggf. in dem Du in den _Internetoptionen_ Deines Systems oder im IE direkt im Dateimenü unter _Extras -> Internetoptionen_ bei _Microsoft VM_ die Java-Console aktivierst.
Dann findest Du sie im Dateimenü unter _Ansicht_ als _Java Befehlszeile_. Aber diese Console zeigt nur die Ausgaben der MS-VM an. Das heißt, wenn Du eine JRE von Sun installiert hast, wird die Java-Console des IE bei deaktivierter MS-VM nichts anzeigen. Das übernimmt dann die Console der Sun-JRE.


----------



## Gast (31. Okt 2004)

Oops, ich hab da wohl die falsche HTML- Datei hier herein kopiert. Ich habe nämlich zwei Versionen des Lottoprogramms. Eine alte mit Datei4 und eine neue mit Lotto... Aber auch wenn ich in der HTML- Datei der Lotto- Version Lotto.class stehen habe, wird in der Java- Konsole folgende Fehlermeldung angezeigt:


```
Error loading class: lotto
java.lang.NoClassDefFoundError
java.lang.ClassNotFoundException: lotto
	at com/ms/vm/loader/URLClassLoader.loadClass
	at com/ms/vm/loader/URLClassLoader.loadClass
	at com/ms/applet/AppletPanel.processSentEvent
	at com/ms/applet/AppletPanel.processSentEvent
	at com/ms/applet/AppletPanel.run
	at java/lang/Thread.run
```

Dateien im Verzeichnis: lotto.bak, lotto.class, lotto.html, lotto.java

Programmcode:

```
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;


//Lotto-Programm

public class lotto extends Applet {
 int[] zahlen;

  public void init() {
   zahlen=new int[6];
   setLayout(new BorderLayout());
   int z;
    
    for (int i=0;i<7;i++) {
      z=(int)(48*Math.random()+1);
      
      for (int j=i-1;j>=0;j--) {
       while (zahlen[i]==zahlen[j]) {
         z=(int)(48*Math.random());
         zahlen[i]=z;
       }
      }
      zahlen[i]=z;
      System.out.println(z);

    }


  }
  
  public void paint(Graphics gc) {

   gc.drawString("Hallo!",20,20);
   String s = new String();


     for (int i=0;i<7;i++) {
       s=String.valueOf(zahlen[i]);
       gc.drawString(s,8,8);
       System.out.println(zahlen[i]);
     }


  }


}
```
Die Zeilen, die durch System.out.println() ausgegeben werden, werden jedoch in der Konsole meines Javaeditors angezeigt... Nur im Java Applet- Viewer des Editors und im Browser, kann nichts angezeigt werden!

Nochmal der Code von lotto.html:

```
<HTML>
<Head>
<Title>lotto-Applet</Title>
</Head>
<Body>
<H1>lotto-Applet</H1>
<HR>
<Applet Code="lotto.class" Width=400 Height=300>
</Applet>
<HR>
</Body>
</HTML>
```


----------



## Gast (1. Nov 2004)

Hat niemand eine Ahnung was da falsch sein könnte??


----------



## L-ectron-X (1. Nov 2004)

Den Code schaue ich mir später noch mal an, zunächst noch einige Zwischenfragen:
Du benutzt den IE zur Anzeige des Applets?
Welche VM hast Du aktiviert?
Mit welcher Version des SDK/JDK hast Du das Applet erstellt?

Möglicherweise hilft Dir dies hier schon etwas weiter:
http://www.java-forum.org/de/viewtopic.php?t=4936


----------



## Gast (1. Nov 2004)

Ich nutze den IE6 und JDK 1.4.2
VM- Version weiss ich nicht...

Allerdings funktioniert das Applet im Appleteditor meines Javaeditors [von Röhner] auch nicht. Dort wird "Applet ist nicht initialisiert!" angezeigt!


----------



## Gast (1. Nov 2004)

Die Konsole funktioniert allerdings im Javaeditor. Dort werden die Zahlen ausgegeben...

Bei anderen Programmen hatte ich das Problem, dass die Applets im Javaeditor laufen, im Browser aber nicht.

Ich werde mir daher später mal deinen Bericht in dem Link durchlesen. Zurzeit habe ich nicht viel Zeit!

Vielen Dank erstmal für alle Antworten!!!!!!


----------



## L-ectron-X (1. Nov 2004)

Kompiliere mal das Applet mit folgendem Befehl:

```
javac lotto.java -target 1.1
```


----------



## Gat (5. Nov 2004)

Hallo!

Sorry das ich nicht geantwortet habe, ich hatte viel zu tun in den letzten Tagen...

Ich hab das grad mal versucht... aber irgendwie macht mein Editor das mit den Parametern nicht. Wie kann ich das denn unter DOS compilieren??


----------



## L-ectron-X (5. Nov 2004)

Das ist der DOS- bzw. Konsolenbefehl. 
Ich weiß nicht ob der Befehl

```
javac MeineKlasse.java -source 1.1
```
etwas ähnliches macht.


----------



## Gast (5. Nov 2004)

Mit dem Parameter -source 1.1 kann die java.- Datei nicht codiert werden und mit -target 1.1 wird, wenn man im IE mit der Maus über das Applet fährt nicht mehr "class not found" oder so angegeben sondern "ArrayIndexOutOfBoundsException".. 

Wenn ich das Programm mit dem Appletviewer starten will, was muss ich denn dann bei <Optionen> eingeben?

appletviewer <?Optionen?> Pfad/HTML- Datei


----------



## L-ectron-X (5. Nov 2004)

```
appletviewer html-Datei
```
genügt, wenn Du das bin-Verzeichnis Deiner SDK-Installation im Suchpfad hast, um ein Applet mit dem Appletviewer zu starten.


----------



## Gast (5. Nov 2004)

Wenn ich nichts als Option eingebe dann kommt die Fehlermeldung:

E/A- Ausnahme beim Lesen: .....\lotto.html |Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch>

Ich bin mir aber sicher das der Pfad C:\lotto4\lotto.html richtig ist!!!

Boah hier klappt echt gar nix  :?


----------



## L-ectron-X (5. Nov 2004)

Der Appletviewer erwartet als Argument einen URL, keinen Systempfad.
Also musst Du die Pfadseparatoren zumindest so schreiben: */*

Ich habe Dir mal Code für ein solches Lotto-Applet geschrieben. Kompiliere das mal und guck mal, ob Du das ausführen kannst.


```
import java.applet.*;
import java.awt.*;

public class Lotto extends Applet {
  private int[] zahlen;

  public void init() {
    zahlen = new int[6];
    int aktuellerTipp = 0;

    //Zufallszahlen ziehen, bis Zahlen vollständig
    while(aktuellerTipp < zahlen.length) {
      int gezogeneZahl = (int)(Math.random() * 100);
      
      //Prüfung, ob Zahl in den Wertebereich passt
      if(gezogeneZahl < 1 || gezogeneZahl > 49)
        continue;
      else {
        zahlen[aktuellerTipp] = gezogeneZahl;
         
        //auf Duplikate prüfen
        for(int i = 0; i < aktuellerTipp; i++) {
          if(zahlen[i] == gezogeneZahl) {
               aktuellerTipp--;
          }
        }
      }
      aktuellerTipp++;
    }
  }

  public void paint(Graphics g) {
    g.drawString("Die Lottozahlen:", 10, 20);
    StringBuffer sb = new StringBuffer();
    
    for (int i = 0; i < zahlen.length; i++) {
      sb.append(zahlen[i]);
      sb.append("   ");
    }
    g.drawString(sb.toString(), 10, 40);
  }
}
```

Funktionsprobe hier!


----------



## Gast (5. Nov 2004)

Ne es kommt wieder die Meldung "class not found".....

Ich glaub ich reparier mal mein IE..

Der Appletviewer gibt auch mit /- Strichen den gleichen Fehler aus


----------



## L-ectron-X (5. Nov 2004)

Schau mal bitte in Dein HTML-File, ich habe den Klassennamen, nach den Sun Coding Conventions, groß geschrieben.
Möglicherweise ist der Name der Klasse in Deiner HTML-Datei noch klein geschrieben.

Welche VM benutzt Du? Die vom IE oder eine von Sun?


----------



## Gast (5. Nov 2004)

Ne ich habe den Klassenname in der java- Datei klein geschrieben..

Wie finde ich den heraus welche VM ich habe??


----------



## L-ectron-X (5. Nov 2004)

In der Console (DOS-Fenster) eingeben:

```
java -version
```

Und dann guck mal in den Einstellungen vom IE, welche VM dort aktiviert ist. Es ist besser nur eine VM zu aktivieren und das sollte natürlich die von Sun sein. :wink:


----------



## Gast (5. Nov 2004)

Also laut java -version hab ich 

V. 1.4.2_04
VM (1.4.2_04-b04,mixed mode)

und bei den Internetoptionen

Ist Java- JIT, Java- Konsole und Java- Protokollierung aktiviert!


----------



## L-ectron-X (5. Nov 2004)

In diesem Fall arbeitet Dein IE nicht mit der Sun JVM sondern mit der modifizierten und veralteten MS-VM.
Eine Zeile in den IE-Einstellungen über den Optionen für die MS-VM sollte aber auch die Sun-VM stehen.
Wenn nicht, ist das zunächst mal nicht uunbedingt ein Beinbruch. Dann ist es aber wichtig, dass Du in Deinem Fall den Code mit dem Befehl

```
javac lotto.java -target 1.1
```
kompilierst, weil die MS-VM den kompilierten Code der aktuelleren SDK-Versionen nicht mehr interpretieren kann.


----------



## Gast (5. Nov 2004)

Ich hab jetzt mal deine Version der lotto.java- Datei in das Compiler- Verzeichnis gepackt und dann mit dem target- Parameter compiliert.

Jetzt funktioniert das Applet!!!!   

Mein Applet versuche ich jetzt auch noch in Gang zu bekommen.

Vielen Dank für die Hilfe!!!!


----------



## Gast (5. Nov 2004)

Na bei meiner Version scheint wohl doch noch der ArrayIndexOutOfBounds- Fehler drin zu sein. Aber den finde ich schon...


----------



## L-ectron-X (5. Nov 2004)

Mit meiner Version, die ja auch nur eine Variante ist, hast Du ja schon mal ein brauchbares Codestück zum Vergleichen.
Viel Glück! :wink:


----------



## Gast (6. Nov 2004)

Ich glaube so ist meine Version jetzt auch richtig:


```
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;


public class lotto extends Applet {
 int[] zahlen;

  public void init() {
   zahlen=new int[6];
   setLayout(new BorderLayout());
   int z;
    
    for (int i=0;i<6;i++) {
      z=(int)(48*Math.random()+1);
      
      for (int j=i-1;j>=0;j--) {
       while (z==zahlen[j]) {
         z=(int)(48*Math.random());
       }
       zahlen[i]=z;
      }
      zahlen[i]=z;
      System.out.println(z);

    }


  }
  
  public void paint(Graphics gc) {

   gc.drawString("Hallo! Dies sind die Lottozahlen:",80,20);
   String s = new String();


     for (int i=0;i<6;i++) {
       s=String.valueOf(zahlen[i]);
       gc.drawString(s,80,i*10+40);
       System.out.println(zahlen[i]);
     }


  }

}
```

Ich bin mir nicht ganz sicher, aber ich habs schon mehrmals getestet und es kamen keine gleichen Zahlen!


----------



## Gast (6. Nov 2004)

Ooohh klappt doch noch nicht mist


----------

