2 Stimmen

Java JEditorPane zeigt keine Bilder an

Ich kann einen JEditorPane nicht dazu bringen, ein HTML-Bild-Tag als Bild darzustellen. Alles, was angezeigt wird, ist eine Platzhaltergrafik. Hier ist mein Code. Vielen Dank im Voraus.

Was ich sehe:

enter image description here

Mein Code:

import java.awt.*;
import java.io.File;
import java.net.URL;
import java.util.Hashtable;

import javax.swing.*;
import javax.swing.text.html.HTMLEditorKit;

public class test 
{
    private static Hashtable image_cache;

public static void main(String[] args) 
{
    image_cache = new Hashtable();

    URL img_url = null;

    try 
    {
        img_url = new File("C:/img/mypic.png").toURI().toURL();
        Image img = Toolkit.getDefaultToolkit ().createImage (img_url); 
        image_cache.put(img_url.toURI(), img);
    } 
    catch (Exception e) 
    {
        e.printStackTrace();
    }

    String html = "" +
            ""+
            "" +
            "" +
            "";

    JEditorPane swingbox = new JEditorPane();
    swingbox.setEditorKit(new HTMLEditorKit());
    swingbox.setContentType("text/html");
    swingbox.setText(html);
    swingbox.getDocument().putProperty("imageCache", image_cache);

    JFrame frame=new JFrame("Beispiel");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(swingbox);
    frame.setSize(800,600);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}
}

4voto

ZakiMak Punkte 2022

Das Problem liegt in Ihrem Code in :

swingbox.getDocument().putProperty("imageCache", image_cache);

Kommentieren Sie diese Zeile aus und es sollte gut funktionieren. Nach ein wenig Recherche fand ich das Problem mit image_cache.put(img_url.toURI(), img). Es sollte image_cache.put(img_url, img) sein.

Ein benutzerdefinierter Bildcache kann Ihnen später dabei helfen, den Code zu debuggen. Hier ist ein Beispiel mit einer kleinen Änderung, die für mich funktioniert hat. Erstellen Sie eine Klasse ImageCache und machen Sie es so, dass wenn das get aufgerufen wird, entweder das Bild aus dem Cache zurückgegeben wird, wenn es gefunden wurde, oder das Bild erstellt, in den Cache gesteckt und zurückgegeben wird, wenn es nicht gefunden wurde.

Beispielcode:

public class TestClass {

    private static ImageCache image_cache;

    public static void main(String[] args) {
        URL img_url = null;
        image_cache = new ImageCache();

        try 
        {
            img_url = new File("C:/Users/User/Images/image.png").toURI().toURL();
            Image img = Toolkit.getDefaultToolkit ().createImage (img_url); 
            image_cache.put(img_url, img);
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
        }

        String html = "" +
                ""+
                "" +
                "" +
                "";

        JEditorPane  swingbox = new JEditorPane ();
        swingbox.setEditorKit(new HTMLEditorKit());
        swingbox.setContentType("text/html");
        swingbox.setText(html);

        JFrame frame=new JFrame("Beispiel");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(swingbox);

        Dictionary cache=(Dictionary)swingbox.getDocument().getProperty("imageCache");

        // den Cache einfügen, wenn er nicht vorhanden ist. Er sollte am Anfang null sein
        if (cache==null) {
            swingbox.getDocument().putProperty("imageCache",image_cache);
        }

        frame.setSize(800,600);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

    }

    static class ImageCache extends Hashtable {

        public Object get(Object key) {

            Object result = super.get(key);

            if (result == null){
                result = Toolkit.getDefaultToolkit().createImage((URL) key);
                put(key, result);
            }

            return result;
        }
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X