使用新数据刷新JEditorPane

时间:2014-08-14 10:29:52

标签: java swing executorservice jeditorpane

如果添加到数据库表中的新数据应该反映出来,我试图每隔5秒刷新一次JEditorPane,但它没有重新绘制。

首先,我有一个JFrame,如下所示,在构造函数中调用

public Browser(String initialURL) {  

    this.initialURL = initialURL;
    WindowUtilities.setNativeLookAndFeel();
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    topPanel = new JPanel();
    urlField = new JTextField(30);
    getContentPane().add(topPanel, BorderLayout.NORTH); 

    try {
        htmlPane = new JEditorPane(initialURL);
        htmlPane.setEditable(false);
        JScrollPane scrollPane = new JScrollPane(htmlPane);
        scrollPane.setHorizontalScrollBarPolicy(HORIZONTAL_SCROLLBAR_NEVER);
        getContentPane().add(scrollPane, BorderLayout.CENTER);
    } catch(IOException ioe) {
       warnUser("Can't build HTML pane for " + initialURL 
                + ": " + ioe);
    }

    Dimension screenSize = getToolkit().getScreenSize();
    setBounds(400, 300, 600, 400);
    setVisible(true);
}

为了启动这个,我创建了一个如下所示的单一类,并传递了要加载的xhtml页面的url,从数据库中选择数据。

public class BrowserInstance {

    public static Browser browser ;

    public static synchronized Browser getInstance(String serverpath)
    {
        if(browser == null)
        {
            browser = new Browser(serverpath);
        }
        else if(browser != null)
        {
            try {
                browser.getHtmlPane().setEditable(false);
                browser.setVisible(true);
                browser.getHtmlPane().setPage(serverpath);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return browser;
    }

}

但由于某种原因,它在popup中没有刷新页面。我可以使用ScheduledExecutorService概念每隔5秒钟调用一次这个单独的课程,我们将非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

如果您传递的urlEditorPane当前显示的stream description property相同,则不会重新加载该文档。因此,您必须通过清除文档的Document document = browser.getHtmlPane().getDocument(); document.putProperty(Document.StreamDescriptionProperty, null); 来强制重新加载文档(请参阅setPage()方法)。

您只需添加以下代码:

{{1}}