我使用javax.swing为一个小应用程序构建GUI。一切都很好,但我只是有点怀疑。我想使用一个JProgressBar来表示进程导出正在运行。由于类Post本身实现了Runnable,如果在run()之后调用setIndeterminate(),那么甚至在export()结束之前就会执行它,就像Java将其放入另一个Thread中一样。
有人知道怎么解决这个问题吗?
this.jProgressBar2.setIndeterminate(true);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Post post = new Post();
post.export();
}
});
this.jProgressBar2.setIndeterminate(true);发布于 2016-03-23 20:09:55
您的问题是,由于post.export()是在后台线程中运行的(我假设),所以您的代码不会阻塞,运行方法之后的代码将立即被调用。
建议:
SwingUtilities.invokeLater(new Runnable() {语句,因为代码已经在Swing事件线程上运行,因此这没有任何作用。addPropertyChangeListener(...)方法,以及在处理完成时PropertyChangeListeners通知GUI。这是通过在完成导出时对支持对象调用适当的firePropertyChange(...)来完成的。https://stackoverflow.com/questions/36187507
复制相似问题