2014-11-07 5 views
1

Итак, мой HTML это.Почему JEditorPane не показывает изображение, написанное в HTML?

<!DOCTYPE HTML> 
<html> 
<body > 
<h1 style="background-color:lightblue">This is a h1</h1> 
<img src="haha.jpg" alt="W3Schools.com" width="104" height="142" > 
</p> 
</body> 
</html> 

Это, как я загрузить HTML:

JEditorPane je = new JEditorPane(); 
je.setEditable(false); 
je.setContentType("text/html"); 
FileReader fr = new FileReader("testPage.html"); 
BufferedReader br = new BufferedReader(fr); 
String text = ""; 
String inputLine = br.readLine(); 
while(inputLine!=null){ 
    text += inputLine+"\n"; 
    inputLine=br.readLine(); 
} 
je.setText(text); 
SwingNode sn = new SwingNode(); 
sn.setContent(je); 

Н1 часть работает отлично, но часть изображения не отображается, который показывает в файл .html. Поэтому я хочу знать, есть ли способ сделать изображение в HTML-шоу? Если JEditorPane не может этого сделать, какой другой компонент отобразит html С изображениями?

Помогите оценить.

+1

Возможно, потому что он не может найти изображение, где он хранится в связи с кодом, который его запускает? – MadProgrammer

+0

Я использовал абсолютный путь к файлу. Во время выполнения JEditorPane сохраняет пространство для изображения, но изображение просто сломано .... – Yvainovski

+0

Возможный дубликат [Как HTML-компоненты Java ссылаются на ресурсы?] (Http: // stackoverflow.com/q/26795598/418556) –

ответ

0

Поскольку вы используете SwingNode, ваше приложение фактически использует JavaFX.

JavaFX имеет компонент веб-браузера, вы можете прочитать об этом здесь:

Overview of the JavaFX WebView Component

Вот краткий пример того, как использовать его:

WebView browser = new WebView(); 
WebEngine webEngine = browser.getEngine(); 
webEngine.load(url); 

url может быть адрес, как "http://example.com" или он может указывать файл или ресурс, похожий на:

Paths.get("testPage.html").toURI().toURL(); 

Если у вас есть содержание HTML как String, вы можете загрузить его, как это:

String htmlContent = "<html>....</html>"; 
browser.getEngine().loadContent(htmlContent); 

Если вы хотите вставить изображения в htmlContent, вы можете сделать это следующим образом:

URL url = Main.class.getResource("haha.jpg"); // haha.jpg is next to Main class 
String text = "<html><img src=\"" + url + "\" width=\"104\" height=\"142\" > </html>"; 

Или, если вы хотите вставить изображение, указывающее на фиксированный файл на вашем компьютере, создайте url так:

URL url = new File("C:/images/haha.jpg").toURI().toURL(); 

Или:

URL url = Paths.get("C:/images/haha.jpg").toUri().toURL(); 
+0

Все еще не работает. Я использовал browser.getEngine(). LoadContent (текст); Изображение не было успешно загружено. – Yvainovski

+0

... Я получил его, после того как я использовал относительный путь в html-файле. ! Но почему это не сработало, когда я использовал абсолютный путь в html-файле, например Yvainovski

+0

@Yvainovski Скорее всего, потому, что вы упустили ** двоеточие **: '' file:/c: /bla/bla/bla/haha.jpg «' является результатом «нового файла» («c: /bla/bla/bla/haha.jpg»). toURI(). toURL(). toString() '. – icza

1

Я скопировал изображение в тот же рабочий каталог, из которого был выполнен и используя следующий HTML программа ...

<!DOCTYPE HTML> 
<html> 
    <body > 
     <h1 style="background-color:lightblue">This is a h1</h1> 
     <img src="haha.jpg" alt="W3Schools.com" width="104" height="142" > 
    </p> 
</body> 
</html> 

И код ...

import java.awt.EventQueue; 
import java.io.File; 
import java.net.URL; 
import java.util.Dictionary; 
import java.util.Hashtable; 
import javax.imageio.ImageIO; 
import javax.swing.JEditorPane; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class TestEditor { 

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

    public TestEditor() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JEditorPane editor = new JEditorPane(); 
       try { 
        editor.setPage(new File("testPage.html").toURI().toURL()); 
       } catch (Exception exp) { 
        exp.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new JScrollPane(editor)); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

} 

Был в состоянии заставить его работать без проблем ...

Editor

Поместите изображение в соответствующее место из контекста программы (".")

+0

Я использую JavaFX. когда я вместо этого использую editor.setPage (новый файл («testPage.html»). toURI(). toURL()); Он показывает массу. – Yvainovski

+0

Тогда почему вы используете 'JEditorPane'? – MadProgrammer

+0

Если вы используете 'JavaFX', то почему бы вам не использовать' WebView'? –

 Смежные вопросы

  • Нет связанных вопросов^_^