[原创]代码范例:一个读文件的进度条

类别:Java 点击:0 评论:0 推荐:

[原创]一个读文件的进度条

/**
 * @(#) 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);
     }
}

本文地址:http://com.8s8s.com/it/it15771.htm