JEditorPane: внешние ресурсы не разрешены

Я использую JEditorPane для отображения некоторых данных HTML, однако любые изображения, которые имеют src="..." в другом месте/сервере, не отображаются. Я предполагаю, что это какое-то ограничение безопасности; мой вопрос: могу ли я отображать данные за пределами URL-адреса JEditorPanes, и если да, то как?

введите здесь описание изображения

Если нет никаких способов отключить это, что было бы лучшим способом разрешения этих внешних ресурсов при отображении HTML в среде AWT/SWING?

Код:

File f = new File("index.html");
JEditorPane jep = new JEditorPane(f.toURI().toURL());
JScrollPane sp = new JScrollPane(jep);

JFrame frame = new JFrame();
frame.add(sp);
jep.setEditable(false);

frame.setVisible(true);
frame.setSize(500, 500);
frame.setTitle(wpj.getParse().getTitle());

Спасибо Эндрю Томпсону за то, что он указал на ошибку в моем HTML-коде. Я обновил HTML-код, который теперь можно найти здесь: http://pastebin.com/EixG3WLH -- Похоже, что неправильный формат HTML может привести к тому, что изображения не появятся.


person krslynx    schedule 19.02.2012    source источник
comment
является ли содержимое изображения src относительным или абсолютным путем?   -  person Marek Sebera    schedule 20.02.2012
comment
Абсолютный путь к another.server.tld   -  person krslynx    schedule 20.02.2012
comment
если это так, можете ли вы показать нам код инициализации для JEditorPane? Существует больше конструкторов, и некоторые из них не подходят для использования с изображениями, внешними ресурсами и так далее.   -  person Marek Sebera    schedule 20.02.2012
comment
Спасибо за помощь; Я обновил вопрос с кодом инициализации для JEditorPane. Извините, все немного абстрактно, дайте мне знать, если я смогу что-то прояснить.   -  person krslynx    schedule 20.02.2012
comment
pastebin.com/9z8ywVNp -- Вот HTML-код, если он вам поможет.   -  person krslynx    schedule 20.02.2012
comment
теперь это правильно и очень хорошо поставленный вопрос, но я не могу дать ответ. удачи друг.   -  person Marek Sebera    schedule 20.02.2012


Ответы (2)


Кажется, здесь все работает нормально, используя URL-адрес на основе файла для HTML и изображение на imgur.com.

ForeignImageInPane

import java.awt.*;
import javax.swing.*;
import java.io.File;

class ForeignImageInPane {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                File f = new File("index.html");
                try {
                    JEditorPane jep = new JEditorPane(f.toURI().toURL());

                    JScrollPane sp = new JScrollPane(jep);
                    sp.setPreferredSize(new Dimension(400,200));

                    JOptionPane.showMessageDialog(null, sp);
                } catch(Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

index.html

<html>
<body>
<img src='http://i.stack.imgur.com/WeiWi.png'>
</body>
</html>

Каковы фактические URL-адреса изображений?

Обновлять

Он также работает с URL-адресом, взятым непосредственно из HTML. Вис.

<html>
<body>
<img src='http://upload.wikimedia.org/wikipedia/commons/thumb/a/af/Kit_shorts.svg/100px-Kit_shorts.svg.png'>
</body>
</html>
person Andrew Thompson    schedule 20.02.2012
comment
См. также редактирование. Кстати, почему HTML-код в корзине для вставки начинается с <td ..>? Это недопустимый HTML, как опубликовано, что может быть проблемой. - person Andrew Thompson; 20.02.2012
comment
Ура, Эндрю, есть некоторые проблемы с выводом, но проблема, похоже, в HTML. Я обновил вопрос с исходным кодом и HTML, чтобы они соответствовали. :-) - person krslynx; 20.02.2012
comment
Последующий вопрос: stackoverflow.com/questions/9361779/ - person krslynx; 20.02.2012

Я создал JFrame с JEditorPane в своей среде IDE, и он работает. Что я сделал по-другому: конструктор был без параметра URL, а после frame.add(jep) я сделал jep.setPage(url).

Похоже, что тип содержимого в вашем коде для загруженной страницы — текстовый/обычный, не так ли?

person Joop Eggen    schedule 20.02.2012