gpt4 book ai didi

java - 使用新数据刷新 JEditorPane

转载 作者:行者123 更新时间:2023-12-02 05:33:11 26 4
gpt4 key购买 nike

我试图每 5 秒刷新一次 JEditorPane,如果新数据添加到数据库表中,它应该得到反射(reflect),但它不会重新绘制。

首先我有一个 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;
}

}

但由于某种原因,它没有刷新弹出窗口内的页面。我可以使用 ScheduledExecutorService 概念每 5 秒调用一次这个 singleton 类,我们将非常感谢您的帮助。

最佳答案

如果您传递的 urlEditorPane 当前显示的 URL 相同,则不会重新加载文档。因此,您必须通过清除文档的流描述属性来强制重新加载文档(请参阅 setPage() 方法)。

您只需添加以下代码:

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

关于java - 使用新数据刷新 JEditorPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25305877/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com