MyFirstApplet funktioniert nicht

lun27

Grünschnabel
Hallo zusammen,


wie ihr am Betreff sicherlich schon erkannt habt, hab ich versucht mein erstes kleines Java-Applet zu programmieren. Ich bin kompletter Anfänger in Sachen Java und stöbere mich daher erstmal durch die ganzen Java-"eBooks" (oder wie man das nennen möchte) im Internet. Nun bin ich bei dem Thema Java-Applet angekommen und wollte dies natürlich auch gleich mal ausprobieren und habe mich dem Code bedient, der auf der jeweiligen Website als Beispiel aufgeführt ist (in diesem Fall: .../wiki/Java_Standard:_Applets).

Mein Problem liegt nun darin, dass mir das Applet einfach nicht dargestellt wird. Es erscheint im 400x400 Bereich ein Kästchen wie man es von einem nicht richtig verlinkten HTML-Image kennt, wo in der linken oberen Ecke ein X-Symbol dargestellt wird.

Daraufhin habe ich nach anderen Java-Applet Tutorials gesucht und das Ganze kam immer wieder aufs Gleiche heraus.

Als ich mir die Java-Konsole angeschaut habe, musste ich feststellen, dass das Applet irgendwie mit dem Klassen-Bezeichner nicht klar kommt. Dann hab ich einfach den Klassennamen geändert, aber der Fehler war immer noch der Gleiche.

Viele schreiben in ihren Tutorials oder in Foren, dass man doch die Init-Funktion im Applet einfügen solle, andere sagen widerrum, dass diese nur gebraucht wird bzw. überschrieben werden muss, wenn man für den Programmablauf Initialisierungen (z.B. Variablen, etc.) vorzunehmen hat. Ob ich diese nun ohne Inhalt einbaue oder komplett weglasse, das Problem bleibt bestehen.

Nun aber zu meinem Quellcode...

MyFirstApplet.java
Java:
package myfirstapplet;

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

public class MyFirstApplet extends Applet {

    @Override public void init() {
        // TODO initialisiere irgendwas...
    }

    @Override public void paint(Graphics g) {
        g.drawString("Hello Applet!", 100, 100);
    }
}

test.html
HTML:
<html>
    <head>
        <title>HelloApplet</title>
    </head>
    <body>
        <applet code="MyFirstApplet.class" width="400" height="400" alt="MyFirstAppletTest">
        </applet>
    </body>
</html>

Beide Dateien sind im selben Verzeichnis lokal auf meiner Festplatte.

Java-Konsole nach dem Aufruf der test.html mit nicht funktionierendem Java-Applet...
java.lang.NoClassDefFoundError: MyFirstApplet (wrong name: myfirstapplet/MyFirstApplet)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at sun.applet.AppletClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.applet.AppletClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.applet.AppletClassLoader.loadCode(Unknown Source)
at sun.applet.AppletPanel.createApplet(Unknown Source)
at sun.plugin.AppletViewer.createApplet(Unknown Source)
at sun.applet.AppletPanel.runLoader(Unknown Source)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

So, ich hoff ich hab nix vergessen, dass euch behilflich sein könnte mir bei meinem kleinen Problem zu helfen.

Danke schon mal im Vorraus.
 
Ein Applet muss seinen eigenen Thread haben um selbstständig laufen zu können.
Wer soll den paint aufrufen wenn nicht das Applet?
So weit ich weiß macht macht das der Browser nicht.

Java:
import java.applet.Applet;
import java.awt.*;

      public class MyFirstApplet extends Applet {
       

          @Override public void init() {

              // TODO initialisiere irgendwas...
          }
	public void start(){
		new Thread();
	}


          @Override public void paint(Graphics g) {
              g.drawString("Hello Applet!", 100, 100);
          }
	public void run(){
		repaint();
	}

      }
Äh, wie kann ich den Code als Code formatiert anzeigen lassen?
 
Zuletzt bearbeitet von einem Moderator:
Hallo,
da du das Applet im Package "myfirstapplet" erstellt hast, muss die MyFirstApplet.class-Datei auch in einen Ordner namens "myfirstapplet".

Dann musst du noch in der HTML-Datei den Aufruf auf

HTML:
<applet code="myfirstapplet/MyFirstApplet.class" width="400" height="400" alt="MyFirstAppletTest">
</applet>

ändern, und dann müsste es klappen!
 
Danke euch beiden für eure Antworten.

Es lag an dem Package, so dass sich die class-File nicht im selben Ordner wie die html-File befinden durfte, sondern in dem extra Ordner "myfirstapplet" (Package-Name). Hab jetzt einfach das komplette Package rausgelassen und siehe da, nun können sich auch beide Dateien im selben Verzeichnis befinden. Danke an Tomek_FFM dafür.

@Lastlord:

Zum Posten von Java-Code einfach den QUOTE-Tag (für Zitate) mit dem Wort JAVA ersetzen.
[.JAVA]blabla[./JAVA]
Den Punkt im Java-Tag musste dir jetzt natürlich wegdenken. ;)

Das mit dem Threading von Java-Applets ist soweit ich weiß nicht notwendig, da die bereits vorhandene Methoden von dem Package "java.applet.Applet" automatisch vom Browser ausgeführt werden, sobald dieser in Berührung mit einem im HTML-Code befindlichen applet-Tag kommt.

HTML:
<applet code="HelloApplet.class" width="400" height="400"></applet>

Sobald der Browser den obigen applet-Tag ausführt, führt er die Methode init() aus, die die Aufgaben eines normalerweise vorhandenen Konstruktors übernimmt. Danach wird die Methode start() ausgeführt, gefolgt von der Methode paint(), die immer wieder aufgerufen wird, sobald das Applet wieder neu auf dem Bildschirm gezeichnet werden muss, weil z.B. ein anderes Windows-Fenster darüber gelegen hat.

Korrigiert mich ruhig, wenn ich das falsch formuliert habe. Hab das heute erst gelesen, weiß also nicht, ob ich das schon richtig wiedergegeben habe.
 
Danke für die Hilfe mit dem Tag.
Was du sagst ist richtig wenn es funktioniert aber normalerweise soll das Bild ja regelmäßig aktualisiert werden.Dann geht es nicht ohne Thread.
 
@Lastlord
Das hier erstellt nur ein neues Object, das war es auch. Also vollkommen unnötig.
Code:
public void start(){
        new Thread();    
}

MFG

Sascha
 
Zurück