如果添加到数据库表中的新数据应该反映出来,我试图每隔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秒钟调用一次这个单独的课程,我们将非常感谢您的帮助。
答案 0 :(得分:2)
如果您传递的url
与EditorPane
当前显示的stream description property
相同,则不会重新加载该文档。因此,您必须通过清除文档的Document document = browser.getHtmlPane().getDocument();
document.putProperty(Document.StreamDescriptionProperty, null);
来强制重新加载文档(请参阅setPage()方法)。
您只需添加以下代码:
{{1}}