getAppletContext() aus static-context?

Status
Nicht offen für weitere Antworten.

Dominicana

Aktives Mitglied
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:
Code:
    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

Top Contributor
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

Aktives Mitglied
Danke Leroy42 :D 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

Gesperrter Benutzer
Wenn du das so machst und die Referenz übergibst, sollte es funktionieren.
Code:
    //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

Aktives Mitglied
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.

Code:
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. :D
 

Dominicana

Aktives Mitglied
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

Gesperrter Benutzer
Code:
JEditorPane pane = new JEditorPane();
add(new JScrollPane(pane));
 

Dominicana

Aktives Mitglied
Ich glaub, jetzt hab ichs:
Code:
JScrollPane jspViewer = new JScrollPane();
        jspViewer.setMinimumSize(new Dimension(250,300));
        jspViewer.getViewport().add(outputPane,null);
scheint zu funktionieren.. :lol:
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben