返回信息流是这样的,我写了个Swing界面,里面有个检查文件内容的方法。由于我怕检查时间过长,UI没有响应,所以我把检查文件的方法写到一个新线程里面。检查的时候启动这个线程。
问题是:有个需求要显示检查进度,这样的话就要求把检查线程里的数据传到UI主线程里面,这个怎么实现?
这是一条镜像帖。来源:北邮人论坛 / java / #23500同步于 2012/9/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
[问题]关于UI线程
pastore
2012/9/18镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
package test;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.concurrent.TimeUnit;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
public class TestProgressFrm extends JFrame implements ActionListener {
/** */
private static final long serialVersionUID = 6596349062174703843L;
private final int size = 101;
private final JProgressBar bar = new JProgressBar(0, 0, size - 1);
private final JButton btn = new JButton("TEST");
/**
* 构造方法
*/
public TestProgressFrm() {
btn.addActionListener(this);
this.add(bar, BorderLayout.CENTER);
this.add(btn, BorderLayout.SOUTH);
this.setTitle("Test Progress");
this.setLocationRelativeTo(null);
this.setSize(new Dimension(300, 100));
}
/**
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btn) {
btn.setEnabled(false);
bar.setValue(0);
new Thread(new Runnable() {
public void run() {
for (int i = 0; i < size; i++) {
try {
TimeUnit.MILLISECONDS.sleep(10);
bar.setValue(i);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
btn.setEnabled(true);
}
}).start();
}
}
public static void main(String[] args) {
new TestProgressFrm().setVisible(true);
}
}