# Wikipedia Artikel lesen



## LastSamurai (29. Apr 2011)

Ich hab in einem Programm verschiedene Suchbegriffe und will das Ergebniss dieser Wikipediasuche in meinem Programm anzeigen.
Am schönsten wäre es natürlich wenn eine Art Minibrowser im Programm erscheinen würde, sodass man gleich Links usw. nutzen könnte. Ich weiß das es in Delphi so eine Komponente gibt. Gibt es in Java etwas vergleichbares??

Ansonste wäre es auch möglich das ganze statisch anzuzeigen. Dazu habe ich folgenden Code probiert, der aber das Problem hat, dass ich den eigentlichen Text ja iwie aus dem ganzen HTML Code holen muss:


```
URL url = new URL("http://de.wikipedia.org/wiki/Sandbox");

                URLConnection connection = url.openConnection();

                BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

                String line, x;
                while ((line = in.readLine()) != null) {
                    line = filterText(line);
                    System.out.println(line);
                    result = result + line;
                }
```

Wobei filterText das halt rausfiltern müsste. Da weiß ich aber auch noch nichtnach welchem Prinzip ich das machen soll.


----------



## Tomate_Salat (29. Apr 2011)

Wenn du mit Swing arbeitest: The DJ project
Oder du nimmst SWT, dass kennt eine Browserkomponente.


----------



## LastSamurai (29. Apr 2011)

Danke ich habe mir das DJ Projekt gerade mal angeschaut und das sieht ziemlich gut aus.
Aber leider verstehe ich nicht so recht wie ich das jetzt nutzen kann. Mit dem einbinden fremder Komponenten habe ich leider noch keine Erfahrungen 
Ich hab mir den Ordner runtergeladen.
Ich nutze Netbeans und habe die DJNativeSwing.jar als Bibliothek hinzugefügt im Projekt. Jetzt ging auch das 
	
	
	
	





```
NativeSwing.initialize();
```
 das in einer der vielen readmes stand. Aber wie nutze ich jetzt den Browser? Oder wie sehe ich mir deren Demo an? Da ist nur die .jar Datei die bei der Ausführung bei mir aber nichts macht...

Sorry für die für euch wahrscheinlich dummen Fragen .


----------



## Tomate_Salat (29. Apr 2011)

Auf der Seite gibt es doch haufenweise code-snippets


----------



## LastSamurai (29. Apr 2011)

Ok danke, die habe ich jetzt auch gefunden. Aber es geht trotzdem noch nicht. Ich habe mal die SimpleWebBrowserExample.java in mein Projekt mit eingebunden und folgenden Code eingebaut:

```
SimpleWebBrowserExample web = new SimpleWebBrowserExample();
```

Dann bekomme ich immer folgende Fehlermeldung:


```
Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/swt/events/MouseListener
        at java.lang.Class.getDeclaredConstructors0(Native Method)
        at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
        at java.lang.Class.getConstructor0(Class.java:2699)
        at java.lang.Class.getDeclaredConstructor(Class.java:1985)
        at chrriis.dj.nativeswing.swtimpl.internal.NativeCoreObjectFactory.create(NativeCoreObjectFactory.java:36)
        at chrriis.dj.nativeswing.swtimpl.components.JWebBrowser.<init>(JWebBrowser.java:189)
        at itunesinfoplus.SimpleWebBrowserExample.<init>(SimpleWebBrowserExample.java:32)
        at itunesinfoplus.Main.main(Main.java:37)
Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.events.MouseListener
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        ... 8 more
```


----------



## Tomate_Salat (29. Apr 2011)

du solltest dir die Beispiele anschauen:

```
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.BorderFactory;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

import chrriis.common.UIUtils;
import chrriis.dj.nativeswing.swtimpl.NativeInterface;
import chrriis.dj.nativeswing.swtimpl.components.JWebBrowser;

/**
 * @author Christopher Deckers
 */
public class SimpleWebBrowserExample extends JPanel {

  public SimpleWebBrowserExample() {
    super(new BorderLayout());
    JPanel webBrowserPanel = new JPanel(new BorderLayout());
    webBrowserPanel.setBorder(BorderFactory.createTitledBorder("Native Web Browser component"));
    final JWebBrowser webBrowser = new JWebBrowser();
    webBrowser.navigate("http://www.google.com");
    webBrowserPanel.add(webBrowser, BorderLayout.CENTER);
    add(webBrowserPanel, BorderLayout.CENTER);
    // Create an additional bar allowing to show/hide the menu bar of the web browser.
    JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 4, 4));
    JCheckBox menuBarCheckBox = new JCheckBox("Menu Bar", webBrowser.isMenuBarVisible());
    menuBarCheckBox.addItemListener(new ItemListener() {
      public void itemStateChanged(ItemEvent e) {
        webBrowser.setMenuBarVisible(e.getStateChange() == ItemEvent.SELECTED);
      }
    });
    buttonPanel.add(menuBarCheckBox);
    add(buttonPanel, BorderLayout.SOUTH);
  }

  /* Standard main method to try that test as a standalone application. */
  public static void main(String[] args) {
    UIUtils.setPreferredLookAndFeel();
    NativeInterface.open();
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        JFrame frame = new JFrame("DJ Native Swing Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new SimpleWebBrowserExample(), BorderLayout.CENTER);
        frame.setSize(800, 600);
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
      }
    });
    NativeInterface.runEventPump();
  }

}
```

Damit hast du schonmal eine Grundlage. Alles weitere steht in der Dokumentation.


----------



## LastSamurai (29. Apr 2011)

?? Aber das habe ich doch gemacht.. genau die Klasse benutze ich ja. (Mal davon abgesehen das ich da die Mainfunktion rausgenommen habe und die in meine Mainfunktion integriert habe).
Und es kommen immer die oben genannten Fehler.

Anscheinend meckert er bei der Zeile

```
final JWebBrowser webBrowser = new JWebBrowser();
```
 rum.

Komisch ist auch 
	
	
	
	





```
org/eclipse/swt/SWT
```
 das (Teil der Fehlermeldungen oben). Warum Eclipse? Ich benutze Netbeans und Eclipse ist momentan nichtmal installiert....


----------



## Tomate_Salat (29. Apr 2011)

SWT ist vergleichbar mit Swing. Eclipse setzt darauf. 

ok sorry habe ich deinen Post nicht richtig gelesen. Welche *.jar hast du in deinem Classpath. Laut readme reicht die DJNativeSwing.jar
Ich schätze mal (ohne reproduktionsversuch): du hast die DJNativeSwing-SWT.jar oder DJNativeSwing-SWTDemo.jar eingebunden. Diese setzen wohl SWT vorraus (welches auch ohne eclipse verwendet werden kann ;-) ).


----------



## LastSamurai (1. Mai 2011)

Ich habe momentan die DJNativeSwing.jar und die DJNativeSwing-SWT.jar eingebunden. Ohne die zweite geht es nicht, da da der Browser anscheinend drin ist. Es kommt immer noch eine Fehlermeldung.
Habe ich beim einbinden envt. etwas falsch gemacht? Ich habe folgendes gemacht:
Unter Netbeans: Im der Projektübersicht links: Rechtsklick auf Libraries und dann Add Jar/Folder und dort die beiden ausgewählt. Dann habe ich eine neue .java Datei erzeugt und den Inhalt der SimpleWebBrowserExample reinkopiert.


----------



## LastSamurai (2. Mai 2011)

Mhm es geht leider immer noch nicht obwohl ich jetzt schon weiter bin. Da in den Fehlermeldungen ja immer was von SWT stand hab ich das mal runtergeladen (die .jars dazu). Hab zuerst die 64 bit Variante finden müssen. Mit der dann folgender Fehler:

```
Exception in thread "main" java.lang.IllegalStateException: The version of SWT that is required is 3.7M5 or later!
```

Also die aktuellste Version installiert... immer noch ein Fehler. Diesmal der hier:

```
NativeSwing[1]: Exception in thread "main" java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons: 
NativeSwing[1]:         no swt-gtk-3721 in java.library.path
NativeSwing[1]:         no swt-gtk in java.library.path
NativeSwing[1]:         Can't load library: C:\Users\"Name"\.swt\lib\win32\amd64\swt-gtk-3721.dll
NativeSwing[1]:         Can't load library: C:\Users\"Name"\.swt\lib\win32\amd64\swt-gtk.dll
...
```

Und tatsächlich scheint unter dem Pfad nichts zu liegen (im Explorer). Kann mir jemand da weiterhelfen? Wo bekomme ich die Dateien jetzt wieder her? Konnte die leider per google nicht finden.


----------



## LastSamurai (3. Mai 2011)

Wäre froh über Hilfe


----------



## freak_007 (3. Mai 2011)

Versuche mal das Development Package herunterzuladen SWT: The Standard Widget Toolkit.
EDIT: Nochmal durchgelesen keine Ahnung warum.


----------



## Empire Phoenix (4. Mai 2011)

Am rande, wenn du nur das ganze einfach anzeigen willst könnte man über die Desktop Llasse auch einfach den systemeigenen Browser benutzen.


----------



## StrikeTom (4. Mai 2011)

Guck mal:

```
import javax.swing.*; 
import javax.swing.event.*; 
import java.io.*; 
import java.net.*; 
 
public class JBrowser extends JEditorPane implements HyperlinkListener 
{ 
  JBrowser( String url ) 
  { 
    setEditable( false ); 
    addHyperlinkListener( this ); 
 
    try 
    { 
      setPage( new URL(url) ); 
    } 
    catch ( IOException e ) { e.printStackTrace(); } 
  } 
 
  @Override public void hyperlinkUpdate( HyperlinkEvent event ) 
  { 
    HyperlinkEvent.EventType typ = event.getEventType(); 
 
    if ( typ == HyperlinkEvent.EventType.ACTIVATED ) 
    { 
      try 
      { 
        setPage( event.getURL() ); 
      } 
      catch( IOException e ) { 
        JOptionPane.showMessageDialog( this, 
                                      "Kann dem Link nicht folgen: " 
                                      + event.getURL().toExternalForm(), 
                                      "Ladefehler", 
                                      JOptionPane.ERROR_MESSAGE ); 
      } 
    } 
  } 
 
  public static void main( String[] args ) 
  { 
    JFrame f = new JFrame(); 
    f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); 
    f.setSize( 600, 500 ); 
    f.add( new JScrollPane(new JBrowser("http://www.heise.de/index.html")) ); 
    f.setVisible( true ); 
  } 
}
```

Hier kannst du was dazu nachlesen


----------



## LastSamurai (5. Mai 2011)

Danke der letzte Tipp war schon mal sehr gut. Das ist etwas einfacher und funktioniert wenigstens^^.

So Problem hat sich geändert: Der Browser läuft erstmal aber hier komme ich nicht weiter, obwohl das ja eigentlich simpel sein sollte^^. Hab in Netbeans ein JFrame mit einem JLabel erzeugt. Wie ändere ich jetzt dynamisch den Text??
Hier ein Ausschnitt aus der Hauptmethode:


```
MainFrame mainfr = new MainFrame();
        mainfr.setVisible(true);
        mainfr.setResizable(false);

        // Geht beides nicht...
        lblTitel.setText("Tets");
        mainfr.lblTitel.setText("Test");
```

Was muss ich hier noch ändern um das zum Laufen zu bringen?
Vielen Dank aber erstmal für die Tipps bis hierher!!


----------



## freak_007 (6. Mai 2011)

Versuch mal repaint() oder revalidate()


----------



## LastSamurai (8. Mai 2011)

Und das soll helfen? Ich hab jetzt eine Einstellung gefunden. Man konnte dort noch einstellen das die Variablen public sein sollen und jetzt geht es. Jetzt aber die nächste Frage: wie bekomme ich ein Button - Gedrückt Ereignis das rein?
Also irgendwie habe ich fast das Gefühl es ist einfacher die Formulare per Code zu erstellen als hier die ganze Zeit an nichts ranzukommen...


----------

