# getAppletContext() aus static-context?



## Dominicana (23. Mai 2006)

Habe mich leider total im Programm verlaufen, und finde keinen Ausweg mehr!

Wie der Titel schon sagt, suche ich nach einer Lösung aus dem Konflikt, aus einer statischen inneren Klasse heraus wieder auf den "Applet.getAppletContext()" zurück zufinden.
Programm-Auszug:

```
static class Link implements MouseListener {

        public void mouseClicked(MouseEvent e) {
            try {
                getAppletContext().showDocument(new URL(
                        "http://www.google.de"), "_blank");
            } catch (MalformedURLException urlE) {
                JOptionPane.showMessageDialog(null, "URLException" + urlE,
                                              "Fehler",
                                              JOptionPane.ERROR_MESSAGE);
            }
        }

        public void mouseEntered(MouseEvent e) {
            progName.setForeground(Color.magenta);
        }

        public void mouseExited(MouseEvent e) {
            progName.setForeground(Color.blue);
        }

        public void mousePressed(MouseEvent e) {
        }

        public void mouseReleased(MouseEvent e) {
        }
    }
```
Fehlermeldung : *non-static method getAppletContext() cannot be referenced from a static context at line 5, column 17*

Wie man sieht, soll nur eine neue Seite mit bsw. "Google" geöffnet werden.

Die inneren Klasse sollte statisch sein, damit man auch aus anderen Applets heraus darauf zugreifen kann.

Ja : Ich habe das FAQ von Benni gelesen, es brachte mich aber nicht weiter.

Ich bin für alle Tips dankbar.

Dom.


----------



## Leroy42 (23. Mai 2006)

Warum muß deine innere Klasse (MouseListener) denn 
unbedingt static sein  :shock: 
Gerade solche Listener wollen doch Zugriff auf die umgebende Instanz
haben.

Wenn's dann unbedingt static sein muß, bleibt dir nichts anderes
übrig, als der Klasse (Instanz) eine Referenz auf das Applet mitzugeben.


----------



## Dominicana (23. Mai 2006)

Danke Leroy42   für deinen Vorschlag, 





> der Klasse (Instanz) eine Referenz auf das Applet mitzugeben


daß schein nicht zu funktionieren. Habs schon probiert , gibt keine Fehler, aber es geschieht garnix.

Habe mich aber vorhin schon hier umgesehen, und stieß dabei auf die Möglichkeit, einen Frame vom Applet aus zu öffnen. Das paßt eigentlich noch besser, weil ich dort auch gleich den Status des Downloads (sollte es ja sein, und nicht eine Seite mit "Google") anzeigen kann.
Bevor Fragen kommen : Ja, ich weiß, daß ich das Applet dazu signieren muß.

Dom.


----------



## L-ectron-X (23. Mai 2006)

Wenn du das so machst und die Referenz übergibst, sollte es funktionieren.

```
//Innere Klasse
     class Link implements MouseListener { 

        public void mouseClicked(MouseEvent e) { 
             loadDocument("http://www.google.de");
        } 

        public void mouseEntered(MouseEvent e) { 
            progName.setForeground(Color.magenta); 
        } 

        public void mouseExited(MouseEvent e) { 
            progName.setForeground(Color.blue); 
        } 

        public void mousePressed(MouseEvent e) { 
        } 

        public void mouseReleased(MouseEvent e) { 
        } 
    }

    /** Instanzmethode innerhalb des Applets.
     * Es kann vom Applet selbst, sowie von außen über eine Referenz auf das Applet
     * auf diese Methode zugegriffen werden. */
    public void loadDocument(String url) {
        try { 
            getAppletContext().showDocument(new URL(url), "_blank"); 
        }
        catch (MalformedURLException urlE) { 
            JOptionPane.showMessageDialog(null, "URLException: " + urlE.getMessage(), "Fehler", 
                        JOptionPane.ERROR_MESSAGE); 
        }     
    }
```


----------



## Dominicana (24. Mai 2006)

Hi L-ectron-X

Leider nein, denn *class Link. . .* ist eigentlich *static class Link. . .* deshalb kommt man da nicht so einfach raus.  :bahnhof: 

Habe mir aber aus einem deiner Beiträge (Calculator) das öffnen eines neuen Frame´s geliehen, damit gehts.


```
static class Link implements MouseListener {
        public void mouseClicked(MouseEvent e) {
            new MainWindow("Dateien werden geladen").setVisible(true);
        }
        public void mouseEntered(MouseEvent e) {
            progName.setForeground(Color.magenta);
        }
        public void mouseExited(MouseEvent e) {
            progName.setForeground(Color.blue);
        }
        public void mousePressed(MouseEvent e) {
        }
        public void mouseReleased(MouseEvent e) {
        }
    }
```
Das funktioniert Prima!    Habs schon in der Nacht soweit fertig gemacht, mit Prog.Bar usw. , wenn das Applet komplett ist, werd ich mal den Code auf Wunsch posten. Aber noch ist genug Arbeit.


----------



## L-ectron-X (24. Mai 2006)

hmm, der Code interssiert mich weniger als das laufende Ergebnis.


----------



## Dominicana (24. Mai 2006)

Da mußte dich noch etwas gedulden. Bingerade dabei, ein Gästebuch in das Applet zu integrieren. Soweit, so gut!
Eingabe : OK!
Übergabe an CGI-Script : OK!
Antwort von CGI-Script : OK!
Ausgabe der Antwort vom CGI-Script in ein JEditorPane : Grrrrrrr........ Eigentlich schon, ABER : wie bekomme ich das JEdPan Scrollbar?????????

Hat jemand ne Idee?

Dom.


----------



## L-ectron-X (24. Mai 2006)

```
JEditorPane pane = new JEditorPane();
add(new JScrollPane(pane));
```


----------



## Dominicana (24. Mai 2006)

So sieht das Applet im JBuilder aus :
http://www.zweipage.de/userdaten/58476398/bilder/applet.jpg
und nur die JEditorPane unten soll scrollbar sein.


----------



## Dominicana (24. Mai 2006)

Ich glaub, jetzt hab ichs:

```
JScrollPane jspViewer = new JScrollPane();
        jspViewer.setMinimumSize(new Dimension(250,300));
        jspViewer.getViewport().add(outputPane,null);
```
scheint zu funktionieren.. :lol:


----------

