设置 JProgressBar
Setting a JProgressBar
我正在使用 javax.swing
为一个小应用程序构建 GUI。一切正常,但我只是有点怀疑。我想用一个 JProgressBar
来表示进程导出是 运行。
由于 class 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);
你的问题是因为 post.export()
在后台线程中被 运行 (我假设)然后你的代码不会阻塞,并且 运行 方法之后的代码将是立即打电话。
建议:
- 删除
SwingUtilities.invokeLater(new Runnable() {
语句,因为代码已经 运行ning 在 Swing 事件线程上,所以这什么都不做。
- 当 post 完成导出时,您需要一些通知机制。给 Post 一个 SwingPropertyChangeSupport 对象,以及一个
addPropertyChangeListener(...)
方法,允许外部 类 (这里是 GUI)添加 PropertyChangeListeners 并将其与 bean 绑定以及 PropertyChangeListeners 一起使用以通知 GUI当处理完成时。这是通过在导出完成时在支持对象上调用适当的 firePropertyChange(...)
来完成的。
我正在使用 javax.swing
为一个小应用程序构建 GUI。一切正常,但我只是有点怀疑。我想用一个 JProgressBar
来表示进程导出是 运行。
由于 class 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);
你的问题是因为 post.export()
在后台线程中被 运行 (我假设)然后你的代码不会阻塞,并且 运行 方法之后的代码将是立即打电话。
建议:
- 删除
SwingUtilities.invokeLater(new Runnable() {
语句,因为代码已经 运行ning 在 Swing 事件线程上,所以这什么都不做。 - 当 post 完成导出时,您需要一些通知机制。给 Post 一个 SwingPropertyChangeSupport 对象,以及一个
addPropertyChangeListener(...)
方法,允许外部 类 (这里是 GUI)添加 PropertyChangeListeners 并将其与 bean 绑定以及 PropertyChangeListeners 一起使用以通知 GUI当处理完成时。这是通过在导出完成时在支持对象上调用适当的firePropertyChange(...)
来完成的。