【问题标题】:Loading html file into JEditorPane将 html 文件加载到 JEditorPane
【发布时间】:2013-02-09 18:05:27
【问题描述】:

谁能告诉我如何将 html 文档加载到 JEditorPane 中。我尝试了以下似乎不起作用的方法:

try{
    URL h = new URL("file://test.html");
    pane.setPage(h); 
} catch (Exception e) {}

【问题讨论】:

  • 那个空的 catch 语句太危险了!不要那样做。至少打印堆栈跟踪或将其记录在某个地方。这可能是你的问题的原因(你不知道失败时发生了什么)。
  • 我现在在 catch 语句中放了一些东西,这样我就可以看到当它失败但 html 文件仍然没有加载时会发生什么。
  • 除了@Sorceror 的明智建议之外,我建议添加以下行File f = new File("test.html"); System.out.println(f.exists()); URL h = f.toURI().toURL(); System.out.println(h);..
  • “我现在有..”edit to the question 中向我们展示新代码。
  • 我添加了您建议的代码行并解决了问题。谢谢!

标签: java html swing


【解决方案1】:

在 java 的 jeditor 窗格中打开 html 文件

       JeditorPane editorpane= new JEditorPane();
       editorScrollPane = new JScrollPane(editorpane);
       editorScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
       File file = new File("F://test.htm");
       editorpane.setPage(file.toURI().toURL());
       editorpane.setEditable(true);

希望对你有帮助, 在这里可以正常工作

【讨论】:

  • 为什么不能直接添加路径??
【解决方案2】:

How to setPage() a JEditorPane with a localfile which is outside of the .jar file?

// get location of the code source
URL url = yourpackage.Main.class.getProtectionDomain().getCodeSource().getLocation();

    try {
        // extract directory from code source url
        String root = (new File(url.toURI())).getParentFile().getPath();
        File doc = new File(root, "test.htm");
        // create htm file contents for testing
        FileWriter writer = new FileWriter(doc);
        writer.write("<h1>Test</h1>");
        writer.close();
        // open it in the editor
        editor.setPage(doc.toURI().toURL());
    } catch (Exception e) {
        e.printStackTrace();
    }

【讨论】:

    【解决方案3】:

    你可以在swing上关注sun的webview教程... :) http://docs.oracle.com/javafx/2/swing/SimpleSwingBrowser.java.htm

    我正在粘贴他们演示的源代码。

    import javafx.application.Platform;
    import javafx.beans.value.ChangeListener;
    import javafx.beans.value.ObservableValue;
    import javafx.embed.swing.JFXPanel;
    import javafx.event.EventHandler;
    import javafx.scene.Scene;
    import javafx.scene.web.WebEngine;
    import javafx.scene.web.WebEvent;
    import javafx.scene.web.WebView;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.net.MalformedURLException;
    import java.net.URL;
    
    import static javafx.concurrent.Worker.State.FAILED;
    
    public class SimpleSwingBrowser implements Runnable {
        private JFXPanel jfxPanel;
        private WebEngine engine;
    
        private JFrame frame = new JFrame();
        private JPanel panel = new JPanel(new BorderLayout());
        private JLabel lblStatus = new JLabel();
    
        private JButton btnGo = new JButton("Go");
        private JTextField txtURL = new JTextField();
        private JProgressBar progressBar = new JProgressBar();
    
        private void initComponents() {
            jfxPanel = new JFXPanel();
    
            createScene();
    
            ActionListener al = new ActionListener() {
                @Override public void actionPerformed(ActionEvent e) {
                    loadURL(txtURL.getText());
                }
            };
    
            btnGo.addActionListener(al);
            txtURL.addActionListener(al);
    
            progressBar.setPreferredSize(new Dimension(150, 18));
            progressBar.setStringPainted(true);
    
            JPanel topBar = new JPanel(new BorderLayout(5, 0));
            topBar.setBorder(BorderFactory.createEmptyBorder(3, 5, 3, 5));
            topBar.add(txtURL, BorderLayout.CENTER);
            topBar.add(btnGo, BorderLayout.EAST);
    
    
            JPanel statusBar = new JPanel(new BorderLayout(5, 0));
            statusBar.setBorder(BorderFactory.createEmptyBorder(3, 5, 3, 5));
            statusBar.add(lblStatus, BorderLayout.CENTER);
            statusBar.add(progressBar, BorderLayout.EAST);
    
            panel.add(topBar, BorderLayout.NORTH);
            panel.add(jfxPanel, BorderLayout.CENTER);
            panel.add(statusBar, BorderLayout.SOUTH);
    
            frame.getContentPane().add(panel);
        }
    
        private void createScene() {
    
            Platform.runLater(new Runnable() {
                @Override public void run() {
    
                    WebView view = new WebView();
                    engine = view.getEngine();
    
                    engine.titleProperty().addListener(new ChangeListener<String>() {
                        @Override
                        public void changed(ObservableValue<? extends String> observable, String oldValue, final String newValue) {
                            SwingUtilities.invokeLater(new Runnable() {
                                @Override public void run() {
                                    frame.setTitle(newValue);
                                }
                            });
                        }
                    });
    
                    engine.setOnStatusChanged(new EventHandler<WebEvent<String>>() {
                        @Override public void handle(final WebEvent<String> event) {
                            SwingUtilities.invokeLater(new Runnable() {
                                @Override public void run() {
                                    lblStatus.setText(event.getData());
                                }
                            });
                        }
                    });
    
                    engine.locationProperty().addListener(new ChangeListener<String>() {
                        @Override
                        public void changed(ObservableValue<? extends String> ov, String oldValue, final String newValue) {
                            SwingUtilities.invokeLater(new Runnable() {
                                @Override public void run() {
                                    txtURL.setText(newValue);
                                }
                            });
                        }
                    });
    
                    engine.getLoadWorker().workDoneProperty().addListener(new ChangeListener<Number>() {
                        @Override
                        public void changed(ObservableValue<? extends Number> observableValue, Number oldValue, final Number newValue) {
                            SwingUtilities.invokeLater(new Runnable() {
                                @Override public void run() {
                                    progressBar.setValue(newValue.intValue());
                                }
                            });
                        }
                    });
    
                    engine.getLoadWorker()
                            .exceptionProperty()
                            .addListener(new ChangeListener<Throwable>() {
    
                                public void changed(ObservableValue<? extends Throwable> o, Throwable old, final Throwable value) {
                                    if (engine.getLoadWorker().getState() == FAILED) {
                                        SwingUtilities.invokeLater(new Runnable() {
                                            @Override public void run() {
                                                JOptionPane.showMessageDialog(
                                                        panel,
                                                        (value != null) ?
                                                        engine.getLocation() + "\n" + value.getMessage() :
                                                        engine.getLocation() + "\nUnexpected error.",
                                                        "Loading error...",
                                                        JOptionPane.ERROR_MESSAGE);
                                            }
                                        });
                                    }
                                }
                            });
    
                    jfxPanel.setScene(new Scene(view));
                }
            });
        }
    
        public void loadURL(final String url) {
            Platform.runLater(new Runnable() {
                @Override public void run() {
                    String tmp = toURL(url);
    
                    if (tmp == null) {
                        tmp = toURL("http://" + url);
                    }
    
                    engine.load(tmp);
                }
            });
        }
    
        private static String toURL(String str) {
            try {
                return new URL(str).toExternalForm();
            } catch (MalformedURLException exception) {
                    return null;
            }
        }
    
        @Override public void run() {
    
            frame.setPreferredSize(new Dimension(1024, 600));
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            initComponents();
    
            loadURL("http://oracle.com");
    
            frame.pack();
            frame.setVisible(true);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new SimpleSwingBrowser());
        }
    }
    

    【讨论】:

      【解决方案4】:

      使用绝对路径怎么样?查看java.lang.System.getProperties 并使用“user.dir”,即获取一些绝对路径来增强您的文件网址。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-04
        • 1970-01-01
        • 1970-01-01
        • 2011-08-10
        • 2012-10-26
        • 2012-02-27
        • 2015-10-01
        • 2017-07-09
        相关资源
        最近更新 更多