Wie kann man mit Java eine HTML-Seite darstellen?

Die Klasse JEditorPane bietet die Möglichkeit zur Darstellung vollständiger HTML-Seiten, bleibt diesbezüglich leider jedoch weit hinter modernen Standards zurück.

Der folgende Quelltext demonstriert die Anfertigung eines kleinen Programms, das lokale und Internet-basierte HTML-Seiten darstellen kann, nichts desto trotz aber von der Funktionalität eines richtigen Browsers sehr weit entfernt ist. Vielmehr zeigt es das Vorgehen bei der Verwendung von JEditorPane und einige Möglichkeiten, eine URL zu überprüfen.
Zu diesem Zweck wird ein kleiner JFrame erstellt, der im oberen Bereich ein JTextField zur Eingabe der URL und im unteren Bereich einen Button zum Laden der Seite enthält. Der mittlere Bereich stellt die geladene Seite in Originalgröße dar.

Die Klasse besitzt neben dem Konstruktor und main() drei Methoden:

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class DisplayHTML extends JFrame {

    private JEditorPane editorPane;
    private JTextField field;
    private JButton button;
    private JPanel buttPanel;
    private String str;
    private URL url;

    public DisplayHTML() {

        field = new JTextField("file://");
        this.add(field, BorderLayout.NORTH);

        button = new JButton("laden");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                setURL();
                loadPage();
            }
        });
        buttPanel = new JPanel(new FlowLayout());
        buttPanel.add(button);
        this.add(buttPanel, BorderLayout.SOUTH);

        editorPane = new JEditorPane();
        editorPane.setEditable(false);
        this.add(editorPane, BorderLayout.CENTER);

        setURL();
        loadPage();

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(300, 200);
        this.setLocationRelativeTo(null);
        this.setVisible(true);
    }

    public void loadPage() {
        // stop the program if there is no URL-Object
        if (url == null) {
            return;
        }
        InputStream in = null;
        BufferedReader buff = null;
        try {
            // load the page
            editorPane.setPage(url);
            // get the source
            in = url.openStream();
            buff = new BufferedReader(new InputStreamReader(in));
            String s;
            // display source
            while ((s = buff.readLine()) != null) {
                System.out.println(s);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if(buff != null) buff.close();
                if(in != null) in.close();
            } catch (IOException ioe){}
        }
    }

    public void setURL() {
        // check the URL-String
        if (!verifyStr())
            return;
        if (str.startsWith("file://") || str.startsWith("http://")) {
            // create an URL-Object
            try {
                url = new URL(str);
            } catch (MalformedURLException e) {
                url = null;
                System.err.println("Falsches URL-Format!");
                e.printStackTrace();
            }
        }
    }

    private boolean verifyStr() {
        // getting the text from the JTextField
        str = field.getText();
        // stop the program if the string is empty or just matches
        // 'http://' or 'file://'
        if (str.equals("") || str.length() < 8)
            return false;
        // try to load an internet site
        if (str.startsWith("http://"))
            return true;
        // if there is just a given path add 'file://'
        if (!str.startsWith("http://") && !str.startsWith("file://")) {
            str = "file://" + str;
        }

        if (str.startsWith("file://")) {
            // check if file is valid and can be read
            String s = str.substring(7);
            File file = new File(s);
            if (file.isFile() && file.canRead()) {
                return true;
            }
        }
        return false;
    }

    public static void main(String[] args) {
        new DisplayHTML();
    }
}