【问题标题】:Refreshing JEditorPane with new data用新数据刷新 JEditorPane
【发布时间】:2014-08-14 10:29:52
【问题描述】:

如果将新数据添加到数据库表中,我会尝试每 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 秒调用一次这个单例类,非常感谢您的帮助。

【问题讨论】:

    标签: java swing executorservice jeditorpane


    【解决方案1】:

    如果您传递的urlEditorPane 当前显示的相同,则不会重新加载文档。因此,您必须通过清除文档的stream description property 来强制重新加载文档(参见setPage() 方法)。

    您只需添加以下代码:

    Document document = browser.getHtmlPane().getDocument();
    document.putProperty(Document.StreamDescriptionProperty, null);
    

    【讨论】:

    • 嗨@blackbishop 我在setpage() 之前将此代码添加到getInstance(String serverpath) 的else 部分没有错误,但它取代了空白页。
    • @pravi 你有没有试过在setPage() 之后添加它?
    • @pravi 还要确保页面不为空
    • @blackbishop 代码是从 ScheduledExecutorService 调用的,那么它可能与 EDT 有问题,可能是由空白页引起的,真的取决于...,没有 MCVE/SSCCE 不知道
    • 我尝试在 setPage() 之后添加但没有运气,我确定页面不是空的。除了白页,甚至 xhtml 页面,它都没有显示任何内容。当我使用它时。但它击中服务器时,我可以用一些 SOP 语句进行检查。
    猜你喜欢
    • 1970-01-01
    • 2011-09-18
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    相关资源
    最近更新 更多