# JApplet funktioniert nicht



## Meganeger (15. Okt 2007)

Hallo,
ich habe mit NetBeans ein kleines Applet zusammengeklickt.
Nur ein Label und ein Button, der den Text von dem Label ändern soll. Leider zeigt mir der Browser das Applet nicht an.
Erstellt habe ich das Applet mit dem GUI Editor von Netbeans.

Hier mal der Quellcode:

```
/*
 * AppletTest.java
 *
 * Created on 15. Oktober 2007, 10:27
 */

public class AppletTest extends javax.swing.JApplet {
    
    /** Initializes the applet AppletTest */
    public void init() {
        try {
            java.awt.EventQueue.invokeAndWait(new Runnable() {
                public void run() {
                    initComponents();
                }
            });
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    
    /** This method is called from within the init() method to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Erzeugter Quelltext ">                          
    private void initComponents() {
        jLabel1 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();

        jLabel1.setText("Test");

        jButton1.setText("Text");
        jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                editText(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel1)
                    .addComponent(jButton1))
                .addContainerGap(232, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton1)
                .addContainerGap(149, Short.MAX_VALUE))
        );
    }// </editor-fold>                        

    private void editText(java.awt.event.MouseEvent evt) {                          
        jLabel1.setText("Hallo, wie geht es dir?");
    }                         
    
    
    // Variablendeklaration - nicht modifizieren                     
    javax.swing.JButton jButton1;
    javax.swing.JLabel jLabel1;
    // Ende der Variablendeklaration                   
    
}
```

Und hier die Fehlermeldung:


> java.lang.ClassCastException: AppletTest cannot be cast to java.applet.Applet
> at sun.applet.AppletPanel.createApplet(Unknown Source)
> at sun.plugin.AppletViewer.createApplet(Unknown Source)
> at sun.applet.AppletPanel.runLoader(Unknown Source)
> ...


----------



## wayne (15. Okt 2007)

stehe diesbezüglich auch etwas ratlos da, da javax.swing.JApplet eigentlich von java.awt.Applet erbt und diese fehlermeldung so nie erscheinen dürfte. hab gehofft, irgendwer würde dir hier was hilfreiches posten, nachdem ich heut nachmittag schon nicht ganz verstanden hatte, was da der fehler sein soll. da bis jetzt sich aber keiner traute, versuch ich's mal.

zunächst mal folgendes. ich selbst habe keinerlei erfahrung mit Netbeans vorzuweisen, da ich meine gui's grundsätzlich selbst von hand erstelle. auf die art weiß ich immer, was wo gemacht wird und bin sicher vor unnötigem code. das ist zwar hier wohl nicht das problem, aber die methode initComponents() per Runnable über die EventQueue aufzurufen ist unnötig. bei applets musst du wissen, daß zunächst die methode init() aufgerufen wird um das applet zu initialisieren, also beispielsweise um die Components auf der oberfläche zu platzieren und anschließend, mehr oder weniger zusammen mit dem ersten zeichnen des applets, die methode start() um das applet zu starten. beispielsweise um eine animation auf der oberfläche loslaufen zu lassen. du kannst also ganz beruhigt in der init() direkt initComponents() aufrufen, das mach ich auch bei meinen applets immer so. ist ja auch bei einem JFrame so, daß du zuerst den GUI-baum aufbaust und erst dann setVisible(true) aufrufst.

zurück zu deinem problem, falls das nach direktaufrufen von initComponents() noch existiert: kannst du mal versuchen von Applet, anstatt von JApplet zu erben? vielleicht erübrigt sich ja dann dein problem. dem code, den du hier gepostet hast, ist es egal, ob er auf einem Applet oder einem JApplet sitzt und ich persönlich konnte da bislang auch noch nicht viel unterschied zwischen den beiden klassen ausmachen, abgesehen vom AWT- bzw. Swing-typischen Component- bzw. JComponent-design, was dir in deinem fall aber egal sein dürfte.

zur not schreib doch mal import javax.swing.JApplet oben drüber und erbe anschließend nur von JApplet und nicht von javax.swing.JApplet. bei dem fehler könnte man fast meinen, der compiler hat irgeneine andere klasse gefunden, namens JApplet, welche nicht von Applet erbt. der appletviewer jedenfalls, welchen du zum anzeigen verwendest und welcher dir diese hier gepostete fehlermeldung wirft, geht von einem Applet aus, sprich, dem wäre es wurscht, ob du ein Applet oder ein JApplet übergibst, hauptsache es lässt sich wie ein Applet händeln.

werd morgen nochmal nachsehen, wie's dir mit deinem problem geht

viel erfolg

wayne


----------



## Wildcard (15. Okt 2007)

Höchstwahrscheinlich hattest du schonmal eine Version ohne extends JApplet, die jetzt noch im Java Cache (nicht Browser Cache) rumdümpelt.


----------



## wayne (16. Okt 2007)

was ähnliches ist mir gestern nacht auch noch als mögliche problemursache eingefallen. ich hätte allerdings java- und browsercache im verdacht gehabt. browsercach zu leeren geht browserspezifisch, weshalb ich dir hier keine hilfe anbieten kann, ohne zu wissen, welchen browser du nutzt. java-cache kannst du abschalten, womit er dann auch nicht mehr benutzt wird, mittels dem dialog Start/Einstellungen/Systemsteuerung/Java/Allgemein. dort findest du unten im bereich Temporäre Internet-Dateien einen button Einstellungen. im folgenden dialog ist oben ein häckchen zu entfernen bei Temporäre Dateien auf Computer belassen.

viel erfolg

wayne


----------



## Wildcard (16. Okt 2007)

Du kannst also keine browserspezifische Hilfe anbieten, aber betriebssystemspezifische?  :bae:


----------



## wayne (16. Okt 2007)

selber :bae: 

ne klar, der gedanke kam mir beim schreiben schon auch. da es bei der betriebssystemnutzung nicht soviele ausreißer wie bei der browsernutzung gibt, kann ich guten gewissens erst mal drauf tippen, daß er windows nutzt. zumindest, wenn ich mich an einem vergleich zwischen den marktanteilen im browsermarkt zu denen im betriebssystemmarkt orientiere.

um diese entscheidung auch gleich zu rechtfertigen:


> heise online veröffentlichte am 08.10.2003 die Meldung Microsoft-Betriebssysteme dominieren weiter mit folgenden Informationen. Im Jahr 2002 wurden 121 Millionen Lizenzen im Desktop Bereich verkauft. Diese teilen sich Windows mit geschätzten 93,8 %, Mac OS mit 2,9 %, Linux mit 2,8 % und andere Betriebssysteme mit 0,5 %.





> Browser-Anteile auf heise online
> 
> Useragents	                        September 2004	 September 2003
> 
> ...



selbstverständlich sind das nicht die neuesten statistiken, aber ich schimpfe mich einfach mal zu faul, als das ich jetzt das web durchsuche (abgesehen davon, daß die neusten nicht sehr weit von diesen hier entfernt sein dürften), nur um dir, Wildcard, zu antworten: ja, ich kann betriebssystemspezifische hilfe aufs blaue hinaus geben, aber keine browserspezifische.

wayne


----------

