[原创]一个读文件的进度条
/** * @(#) TestProgressBar.java * * Copyright 2004 Opensource Develop Team. All rights reserved. */
// package package com.opensource.progressbar;
// import classes import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileInputStream; import java.io.InputStream;
import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.ProgressMonitorInputStream;
/** * 当读取一个大文件的时候,需要显示一个进度条提示用户还有多少要读取和已经 * 读取了多少内容。 * * @author ODT * @version 1.0 01/05/2004 * @since JDK 1.3 */
public class TestProgressBar { public static void main(String[] args) { // 创建一个有button的frame final JFrame f = new JFrame("Sample"); f.getContentPane().setLayout(new FlowLayout()); JButton b = new JButton("Press me"); f.getContentPane().add(b); f.pack();
// set up the file read action b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // 当button按下的时候开始一个线程去读取文件。 // 因为我们需要一个空闲的线程去更新绘制progress monitor new Thread() { public void run() { try { // 打开一个文件,封装进ProgressMonitorInputStream InputStream in = new FileInputStream("D:\\Java projects\\mail.txt"); ProgressMonitorInputStream pm = new ProgressMonitorInputStream(f,"Reading the big file",in); // 读文件。如果需要很长时间,progress monitor将出现。 int c; while((c=pm.read()) != -1) { // do something } pm.close(); // 可以改写一个更好的错误处理 } catch(Exception ex) { ex.printStackTrace(); } } }.start(); } }); // 显示frame f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }

|