# Im JFrame ein JApplet zum öffnen einer Url benutzen



## robb (5. Dez 2006)

Hi,

ich habe hier im Forum und mit Google gesucht, bin aber zu keiner wirklich zufriedenstellenden Lösung gekommen, deswegen frage ich nochmal hier:

So habe ich mir das im Moment gedacht, nur irgendwo hab ich einen Denkfehler gemacht, denn es wird ein leeres Frame angezeigt sobald ich die folgende Klasse instanzieren möchte.


```
import java.awt.*;
import javax.swing.*;
import java.net.*;
import java.io.*;

class BrowserFrame extends JFrame{
	
	JApplet app= new JApplet(){
		public void init(){
     	    setVisible(true);
		}
	};
	
	public BrowserFrame(String url){
		try{
			URL tmp= new URL(url);
			setLayout(new GridLayout(1,1));
			app.init();
			setVisible(true);
			setSize(800, 600);
			app.getAppletContext().showDocument(tmp);
			getContentPane().add(app);
		}catch (Exception e){}
	}
}
```

grüsse Robb


----------



## robb (5. Dez 2006)

Naja ich möchte das Applet nur für das Darstellen von Webseiten benutzen.


----------



## m@nu (5. Dez 2006)

warum verwendest du dafür nicht einfach ne JEditorPane/JTextPane?

:arrow: http://www.exampledepot.com/egs/javax.swing.text/ep_ShowHTML.html


----------



## robb (5. Dez 2006)

Hmm, also wenn ich das Versuche wird mir auch nichts angezeigt...
Mein Code dazu sieht im Moment wie folgt aus:


```
import java.awt.*;
import javax.swing.*;
import java.net.*;
import java.io.*;

class BrowserFrame extends JFrame{
	public BrowserFrame(String url){
		try {
			URL tmp = new URL(url);
        	JEditorPane editorPane = new JEditorPane(tmp);
        	editorPane.setEditable(false);
        	setLayout(new BorderLayout());
            getContentPane().add(editorPane, BorderLayout.CENTER);
            setSize(800,600);
			setVisible(true);
    	}catch (IOException e) {}
	}
}
```

Es wird nichtmal ein Frame geöffnet wenn ich diese Klasse instanziere....


----------



## robb (5. Dez 2006)

Ich denke mal so wie ich die Komponente JEditorPane verstanden habe wird mir damit nur der Text von Html Seiten angezeigt, sobald die Html Seite ein wenig komplexer wird, kann es nicht mehr dargestellt werden...

Am Liebsten wäre es mir, wenn ich mittels der Applet Methode showDocument(URL) die Website darstellen könnte...
Nur meine Frage bleibt damit immer noch offen wie ich das Aufrufen kann, wenn das Applet in einem Frame eingebettet wurde.


----------



## robb (6. Dez 2006)

Hat keiner eine Lösung oder ist das zu trivial?


----------



## The_S (6. Dez 2006)

robb hat gesagt.:
			
		

> Ich denke mal so wie ich die Komponente JEditorPane verstanden habe wird mir damit nur der Text von Html Seiten angezeigt, sobald die Html Seite ein wenig komplexer wird, kann es nicht mehr dargestellt werden...



Imho kann das JEditorPane nur HTML bis 3.0 darstellen



			
				robb hat gesagt.:
			
		

> Am Liebsten wäre es mir, wenn ich mittels der Applet Methode showDocument(URL) die Website darstellen könnte...



Durch diese Funktion wird die aktuelle Seite im BROWSER durch die übergebene URL ersetzt. Dein JFrame befindet sich aber nicht im Browser.



			
				robb hat gesagt.:
			
		

> Es wird nichtmal ein Frame geöffnet wenn ich diese Klasse instanziere....



Wie rufst du die Klasse denn auf?


----------



## robb (6. Dez 2006)

Die Klasse wird in einer actionPerformed Methode mit einem ActionListener auf ein Menuitem aufgerufen.
Aber ich sehe schon das Problem, dass ich das Frame neu instanziere und  nicht in einem Browser aufrufe. Gibt es denn ne Möglichkeit auch einen neuen Browser aufzurufen? Bisher hab ich es mit folgendem Code gemacht:


```
import java.io.IOException;

public class BrowserControl {
    // Used to identify the windows platform.
    private static final String WIN_ID = "Windows";
    // The default system browser under windows.
    private static final String WIN_PATH = "rundll32";
    // The flag to display a url.
    private static final String WIN_FLAG = "url.dll,FileProtocolHandler";
    // The default browser under unix.
    private static final String UNIX_PATH = "netscape";
    // The flag to display a url.
    private static final String UNIX_FLAG = "-remote openURL";

    public static void displayURL(String url) {
        boolean windows = isWindowsPlatform();
        String cmd = null;
        try {
            if (windows) {
                // cmd = 'rundll32 url.dll,FileProtocolHandler http://...'
                cmd = WIN_PATH + " " + WIN_FLAG + " " + url;
                Runtime.getRuntime().exec(cmd);
            } else {
                // Under Unix, Netscape has to be running for the "-remote"
                // command to work. So, we try sending the command and
                // check for an exit value. If the exit command is 0,
                // it worked, otherwise we need to start the browser.
                // cmd = 'netscape -remote openURL([url]http://www.javaworld.com[/url])'
                cmd = UNIX_PATH + ' ' + UNIX_FLAG + '(' + url + ')';
                Process p = Runtime.getRuntime().exec(cmd);
                try {
                    // wait for exit code -- if it's 0, command worked,
                    // otherwise we need to start the browser up.
                    int exitCode = p.waitFor();
                    if (exitCode != 0) {
                        // Command failed, start up the browser
                        // cmd = 'netscape http://www.javaworld.com'
                        cmd = UNIX_PATH + " " + url;
                        p = Runtime.getRuntime().exec(cmd);
                    }
                } catch (InterruptedException x) {
                    System.err.println("Error bringing up browser, cmd='" + cmd + "'");
                    System.err.println("Caught: " + x);
                }
            }
        } catch (IOException x) {
            // couldn't exec browser
            System.err.println("Could not invoke browser, command=" + cmd);
            System.err.println("Caught: " + x);
        }
    }
    /**
    * Try to determine whether this application is running under Windows
    * or some other platform by examing the "os.name" property.
    *
    * @return true if this application is running under a Windows OS
    */
    public static boolean isWindowsPlatform() {
        boolean retVal = false;
        String os = System.getProperty("os.name");
        if (os != null && os.startsWith(WIN_ID)) {
            retVal = true;
        } else {
            retVal = false;
        }
        return retVal;

    }
}
```

Allerdings funktioniert das ganze nicht mehr, wenn ich ein Applet benutze...

mfg Robb


----------



## The_S (6. Dez 2006)

robb hat gesagt.:
			
		

> Die Klasse wird in einer actionPerformed Methode mit einem ActionListener auf ein Menuitem aufgerufen.



Ich meinte eigentlich wie der aufruf genau codetechnisch aussieht, nachdem bei dir das Fenster ja nciht mal angezeigt wird.



			
				robb hat gesagt.:
			
		

> Aber ich sehe schon das Problem, dass ich das Frame neu instanziere und  nicht in einem Browser aufrufe.



Ein Frame kann nicht IM Browser aufgerufen werden. Evtl. von einem Applet AUS dem Browser, aber nicht im.



			
				robb hat gesagt.:
			
		

> Gibt es denn ne Möglichkeit auch einen neuen Browser aufzurufen?



Möglichkeit a) Java 6 verwenden
Möglichkeit b) JDIC verwenden



			
				robb hat gesagt.:
			
		

> Allerdings funktioniert das ganze nicht mehr, wenn ich ein Applet benutze...



Joa, müssteste vermutlich signieren

Jetzt mal ganz allgemein, irgendwie verwirrst du mich. Was willst du jetzt? Ein Applet IN einem Browser das eine neue Seite aufruft, oder eine ganz normale Applikation OHNE Browser, die u. a. den Browser mit einer bestimmten URL öffnen kann?


----------



## robb (6. Dez 2006)

> Ich meinte eigentlich wie der aufruf genau codetechnisch aussieht, nachdem bei dir das Fenster ja nciht mal angezeigt wird.



So sieht der Aufruf aus:


```
BrowserFrame bf = new BrowserFrame("http://www.google.de/");
```

Bei dem Code mit dem JEditPane wird nichts angezeigt und bei dem anderen Code mit dem Applet wird ein leeres Frame angezeigt.



> Jetzt mal ganz allgemein, irgendwie verwirrst du mich. Was willst du jetzt? Ein Applet IN einem Browser das eine neue Seite aufruft, oder eine ganz normale Applikation OHNE Browser, die u. a. den Browser mit einer bestimmten URL öffnen kann?


Ich möchte ein Applet in einem Browser haben, das eine Neue Seite aufruft. Und auf dieser Seite soll einen bestimmte Url angezeigt werden.


----------



## The_S (6. Dez 2006)

robb hat gesagt.:
			
		

> Bei dem Code mit dem JEditPane wird nichts angezeigt



Ich wette mit dir, dass eine Exception geworfen wird  .



			
				robb hat gesagt.:
			
		

> Ich möchte ein Applet in einem Browser haben, das eine Neue Seite aufruft. Und auf dieser Seite soll einen bestimmte Url angezeigt werden.



Und warum handierst du dann mit Frames rum, wenn du ein Applet haben möchtest?


----------



## robb (6. Dez 2006)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> Ich wette mit dir, dass eine Exception geworfen wird icon_wink.gif .


Du hast Recht es wird eine Exception geworfen, denn ich darf die Url nicht auflösen etc. was wiederum bedeuten würde, dass ich die Sicherheitseinschränlungen umändern und das Applet signieren  müsste, was ich aber nicht möchte.



			
				Hobbit_Im_Blutrausch hat gesagt.:
			
		

> Und warum handierst du dann mit Frames rum, wenn du ein Applet haben möchtest?



Ich habe ein Applet erstellt und dort soll ein neues Fenster geöffnet werden. Dies habe ich mit Frame bzw. Applet ausprobiert nur hat keins vom beiden zum gewünschten Erfolg geführt...


----------



## The_S (6. Dez 2006)

Ein Frame hat nichts mit dem Browser zu tun :roll:, mach einfach 


```
getAppletContext().showDocument(url, "_blank");
```

in deiner Applet-Klasse. Sollte funktionieren  .


----------



## robb (6. Dez 2006)

Das ist mir auch klar, dass das funktioniert^^. Aber es ging mir darum ein neues Fenster zu öffnen in dem eine Url angezeigt werden soll, mit genau dem Befehl....

```
getAppletContext().showDocument(url, "_blank");
```

Ich kann es natürlich alles so schreiben, habe ich mir auch schon überlegt, aber meiner Meinung nach ist es nicht wirklich Benutzerfreundlich wenn ich es so mache:-(.


----------



## The_S (6. Dez 2006)

Hä? Was denn für n Fenster (Java-Fenster, Browser-Fenster, ...)?


----------



## robb (6. Dez 2006)

So nochmal von vorne, hab wohl mal wieder Probleme mich treffend auszudrücken.
Ich habe ein Applet geschrieben in dem ein Button existieren soll, der beim Betätigen ein neues Applet/Browserfenster aufrufen soll. Und in diesem neuen Fenster möchte ich eine beliebige Url anzeigen lassen.


----------



## DaKo (6. Dez 2006)

Ohne Garantie, da ich mich nicht mit Applets auskenne:


```
new JApplet().getAppletContext().showDocument(url, "_blank");
```

funktioniert das?


----------



## robb (6. Dez 2006)

Nein, funktioniert leider nicht.


----------



## The_S (6. Dez 2006)

robb hat gesagt.:
			
		

> ein neues Applet/*Browserfenster *aufrufen soll. Und in diesem neuen Fenster möchte ich eine beliebige Url anzeigen lassen.



Was spricht gegen meine Lösung?


----------



## robb (6. Dez 2006)

Das ich mit deiner Lösung das Browserfenster für die Url benutze in dem mein Applet war. Ich möchte aber ein "neues" Browserfenster öffnen.


----------



## The_S (6. Dez 2006)

Das is aber merkwürdig. Weil laut API, sollte bei Übergabe des Targets "_blank" ein neues Fenster geöffnet werden. Und das hat bis jetzt auch immer so bei mir funktioniert ...



> "_blank"  Show in a new, unnamed top-level window.


----------



## Leroy42 (6. Dez 2006)

:shock:  :autsch:  ???:L  :bahnhof:  :autsch: 

 Frei nach Loriot: Ich bringe ihn um, morgen bringe ich ihn um....


----------



## robb (6. Dez 2006)

Okay, habs nun nochmal ohne eine eigene Klasse zu erstellen versucht und nun ging es. Vielen Dank für die Geduld mit mir   

mfg Robb


----------

