# Integration eines www-Browsers in eine Swing-Application



## JSteinhilber (4. Apr 2008)

Ausnahmsweise keine Fragen zu OpenOffice (aber die kommen wieder, das ist lediglich eine Frage der Zeit...).

Also: auf der Suche nach einer Möglichkeit relativ einfach und schnell einen WebBrowser in ein JXPanel zu packen, wurde ich dank meinem Freund Google fündig. Die Lösung lautete "jdic-Bibliothek".
Downgeloaded und die Jars in mein Jar-Verzeichnis gepackt habe ich sogleich meinen ersten Test gestartet.
Schlicht und einfach wie gewohnt habe ich folgende Zeilen zusammengepfriemelt:




```
Class RtaWissen extends JXPanel{
.......

	public RtaWissen(int setOben){
		super();

		this.setOben = setOben;
		setLayout(new BorderLayout());
                .......
		SwingUtilities.invokeLater(new Runnable(){
	      	     public  void run()
	      	     {
	      		   webBrowser = new WebBrowser();
	      		   try {
	      			   webBrowser.setURL(new URL("http://192.168.2.165:5557/rta_wissen/rtawissenstart.php"));
	      			   webBrowser.setVisible(true);
	      			   add(webBrowser,BorderLayout.CENTER);
	      		   } catch (MalformedURLException e) {
	      			   System.out.println(e.getMessage());
	      			   return;
	      		   }
	      	     }
      	         });
         }
.....
}
```

Das Ergebnis war für meinen Geschmack (zunächst) phänomenal:






Bei näherer Betrachtung hat sich die Sache allerdings relativiert.
1. Wurde ohne zu Fragen der IExplorer verwendet obwohl mein Standard-Browser FireFox ist.
2. Beim "Disposen" der TitledPanel als Container für den Browser, erhalte ich recht häßliche Lieder.

```
Exception in thread "Thread-9" java.lang.NullPointerException: null pData
	at sun.awt.windows.WComponentPeer.hide(Native Method)
	at java.awt.Component.removeNotify(Unknown Source)
	at org.jdesktop.jdic.browser.WebBrowser.access$201(Unknown Source)
	at org.jdesktop.jdic.browser.WebBrowser$2.run(Unknown Source)
```

a.) Hat zufällig schon jemand die "jdic-Bibliothek" mit Erfolg eingesetzt und könnte mir einen Tip geben wie man erzwingt, daß nicht der IExplorer sondern Mozilla der Herr im Hause ist?
b.) Kann jemand mit der gewaltigen Fehlermeldung etwas anfangen und hat eine Idee was das Problem ist?


Grüße
Jürgen


----------



## JBenutzername (5. Apr 2008)

JDIC wird schon seit geraumer Zeit nicht mehr weiter entwickelt, da die meisten Features ins JDK 6 mit eingeflossen sind. Du könntest mal DJ Native Swing (http://djproject.sourceforge.net/ns/) ausprobieren


----------



## JSteinhilber (5. Apr 2008)

Hallo JBenutzername,
vielen Dank für den Hinweis.

Ich habe mir die DJNativeSwing.jar heruntergeladen und das Beispiel "SimpleWebBrowserExample" in meine Anwendung eingebunden.
Das würde für meine Zwecke völlig genügen und so viel falsch machen kann man da ja eigentlich nicht.
Aber oh Wunder, die Liste der Fehlermeldungen ist lang:


```
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at chrriis.dj.nativeswing.NativeInterfaceHandler.checkUIThread(NativeInterfaceHandler.java:549)
	at chrriis.dj.nativeswing.ui.NativeComponent.createResources(NativeComponent.java:526)
	at chrriis.dj.nativeswing.ui.NativeComponent$8.run(NativeComponent.java:519)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
```

Hast Du mit dieser Bibliothek schon einmal gearbeitet?
Oder gar eine Idee was bei mir schief laufen könnte?

Gruß
Jürgen


----------



## JBenutzername (5. Apr 2008)

Hmm, vielleicht hast greift Du aus dem falschen Thread (nur aus dem EDT) auf die DJ-Klassen zu.


----------



## JSteinhilber (5. Apr 2008)

Sorry für meinen letzten Beitrag - Problem gelöst!
(Wer lesen kann und dann auch noch liest, der ist klar im Vorteil)

Auszug aus der readme.txt



> 2. How to use it?
> 
> Simply place the NativeSwing.jar library in your classpath, as well as the SWT
> 3.4 library corresponding to your platform (visit http://www.eclipse.org/swt).
> ...



So klappt die Sache wunderbar und die Fehlerliste bleibt geschlossen.
Einzige Crux, der Browser ist deutlich(st) langsamer als FireFox

Grüße
Jürgen


----------



## Tobias (5. Apr 2008)

Du könntest den Browser per Kommandozeile aufrufen. Den Startbefehl kannst du ja irgendwo konfigurierbar hinterlegen. Nachteil ist, das du dann keine Kontrolle über die Browserinstanz mehr hast.

Such mal System.exec(String) und/oder ProcessBuilder.

mpG
Tobias


----------



## Flin (9. Sep 2008)

Hallo,

ich will ebenfalls eine Browser-Komponente zu meinem Programm hinzufügen. Nun schwankt meine Entscheidung zwischen JDIC und dem DJ Project. 

Bei meinem Programm handelt es sich um eine relativ kleine Swing-Applikation, die möglichst leichtgewichtig bleiben soll. Die Crux an der Sache ist aber, dass auch das Flash-Plugin funktionieren muss, was natürlich nur mit nativen Komponenten funktioniert. Nichts desto trotz würde ich das Programm gerne so plattformunabhängig wie möglich halten (Win, Linux, MacOS).

Welche der beiden Bibliotheken würdet ihr empfehlen?
Danke im Voraus!


----------



## The_S (9. Sep 2008)

Also ich hab das mal so gemacht, dass ich den SWTWebBrowser über ne AWT-SWT-Bridge in mein Programm integriert habe. Evtl. ist das ja eine Alternative für dich.


----------

