JavaFX: в теге img WebView не загружаются локальные изображения

Ниже приведен мой код. Всё хорошо. Я могу загрузить удаленную страницу. Я могу поместить HTML-контент, но мой тег img показывает знак X, означающий, что он не может загружать изображения.

Примечание: Мои изображения находятся в том же пакете вместе с классом JavaFX в папке Smiley, и я могу перечислить все изображения, что означает, что проблем с путем нет.

import java.awt.BorderLayout;
import java.io.File;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class JavaFX {
    static WebView webView;
    static WebEngine webEngine;
    static String imgs = "";

    public JavaFX() {
        File f = new File(getClass().getResource("/Smiley").getFile());
        for (File fs : f.listFiles()) {
            imgs += "<img src=\""+fs+"\" width='50' />";
        }
        System.out.println(imgs);
    }
    
    private void initAndShowGUI() {
        // This method is invoked on Swing thread
        JFrame frame = new JFrame("FX");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(new BorderLayout()); 
        final JFXPanel fxPanel = new JFXPanel();
        frame.add(fxPanel, BorderLayout.CENTER);
        frame.setVisible(true);
        frame.setSize(800, 800);
        
        Platform.runLater(new Runnable() {
            @Override
            public void run() {
                initFX(fxPanel);
            }
        });
    }

    private void initFX(final JFXPanel fxPanel) {
        Group group = new Group();
        Scene scene = new Scene(group);
        fxPanel.setScene(scene);
        webView = new WebView();

        group.getChildren().add(webView);
        webEngine = webView.getEngine();
        webEngine.loadContent("<div id='content'>"+imgs+"</div>");      
    }

    public static void main(final String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JavaFX fx = new JavaFX();
                fx.initAndShowGUI();
            }
        });
    }
}

Выводится следующее

Выход вышеуказанной программы


person Muhammad    schedule 19.10.2014    source источник


Ответы (3)


Спасибо, ребята, за вашу помощь, я получил следующее очень простое решение

imgs += "<img src=\""+fs.toURI()+"\" width='50'>";

путь к изображению должен быть преобразован в URI или URL-адрес, чтобы веб-представление могло его прочитать.

person Muhammad    schedule 19.10.2014

Вы можете попробовать это:

URL url = getClass().getResource("Smiley.png");
File file = new File(url.getPath());
person DeepInJava    schedule 19.10.2014
comment
объяснить, как использовать код и почему это может быть решением проблемы - person Rune FS; 19.10.2014
comment
@Sanket Pipariya Спасибо за ваш ответ, проблема не в пути, путь правильный, и я могу перечислить все файлы в каталоге, но он не отображается в WebView с использованием тега img !!! - person Muhammad; 19.10.2014
comment
уважаемые @RuneFS и Санкет Пипария, я решил проблему, см. здесь stackoverflow.com/a/26451542/1966247 - person Muhammad; 19.10.2014

Вам, вероятно, нужно прочитать пути к файлам также через getClass().getResource():

    for (File fs : f.listFiles()) {
        imgs += "<img src=\"" + getClass().getResource(fs.getName()) + "\" width='50' />";
    }
person janih    schedule 19.10.2014
comment
Спасибо, дорогой, за помощь :), я решил проблему, см. здесь stackoverflow.com/a/26451542/1966247 - person Muhammad; 19.10.2014