Java JEditorPane不显示图像

时间:2014-12-27 17:38:12

标签: java swing jeditorpane

我无法获得JEditorPane将HTML img标记呈现为图像。所有显示的都是占位符图形。以下是我的代码。提前谢谢。

我所看到的:

enter image description here

我的代码:

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 = "<html>" +
            "<body>"+
            "<img src=\"" + img_url.toString() + "\">" +
            "</body>" +
            "</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("Example");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(swingbox);
    frame.setSize(800,600);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}
}

1 个答案:

答案 0 :(得分:4)

问题出在您的代码中:

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

注释掉这一行,它应该可以正常工作。经过一番挖掘后,我发现问题出在 image_cache.put(img_url.toURI(),img)上。应该是 image_cache.put(img_url,img)

自定义图像缓存可以帮助您以后调试代码。这是一个有点变化的例子,对我有用。创建一个 ImageCache 类,使其在调用 get 时,如果找到图像或从图像创建后返回图像,则放入缓存并返回(如果不是)找到。

示例代码:

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 = "<html>" +
                "<body>"+
                "<img src=\"" + img_url.toString() + "\">" +
                "</body>" +
                "</html>";

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



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

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

        // put the cache if it is not present. it should be null in the beginning
        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;
        }
    }

}