Проблема JEditorPane с асинхронной загрузкой изображений - PullRequest
1 голос
/ 05 августа 2011

Я пытаюсь создать простое приложение Swing, которое содержит несколько JEditorPanes внутри.Каждый JEditorPane содержит текст с HTML-тегами внутри.А также некоторые панели содержат HTML с тегами <img src='http://some.url' />, это означает, что изображения могут быть где-то в сети. И проблема в том, что - если один из URL-адресов изображений недоступен - все мои JEditorPanes и целые приложения работают с ошибками. (Я создаю JEditorPanes в своем собственном потоке, а после создания помещаю их в основной фрейм, используя SwingUtilities.invokeLater(...))

Я считаю, что изображения, загружаемые в JEditorPanes асинхронно, есть ли возможность убить эти огромные потоки загрузки изображений?

Или, может, есть лучшее решение?

Спасибо

PS Используется SwingWorker.Проблема в том, что если какой-либо URL-адрес изображения недоступен, все JEditorPanes не могут загрузить свои изображения.На самом деле они не зависают, но не могут загружать изображения.Почему?

PPS

Фоновая нить:

    JEditorPane jtp=new JEditorPane();
    jtp.setContentType("text/html");
    jtp.setPreferredSize(newDimension(20,250));                     
    StringBuilder sb=new StringBuilder();
    sb.append("<img src='").append(url).append("'/>");
    jtp.setText(sb.toString());

    SwingUtilities.invokeLater(new Runnable(){
    @Override
    public void run() {                             
       myPanel.add(rigid,0);        
       myPanel.add(jtp,0);

       myPanel.revalidate();
      }
    });

Ответы [ 2 ]

2 голосов
/ 05 августа 2011

рассмотрите возможность использования SwingWorker , с примером или существует возможность запуска задания BackGround из Runnable # Thread (вывод должен быть заключен в invokeLater ()

1 голос
/ 05 августа 2011

Я согласен с mKorbel, что фоновая ветка - это путь (1+ к его ответу), и что SwingWorker - один из способов сделать это.Если вам требуется одновременная работа нескольких фоновых потоков, будьте осторожны при использовании SwingWorker, поскольку недавно была ошибка, из-за которой все SwingWorkers использовали только один поток.В этом случае рассмотрите возможность использования Executors / Futures.

...