WEB开发网
开发学院WEB开发Jsp 怎样在Java实例开发的过程中使用进度条 阅读

怎样在Java实例开发的过程中使用进度条

 2008-01-05 10:52:05 来源:WEB开发网   
核心提示:在读取大型文件或者其它大批量数据输入操作时,希望能够通过一个进度条显示当前的进度,怎样在Java实例开发的过程中使用进度条,现在在java中非常轻易实现,仅仅需要几行代码即可,// 显示已读取的百分比,int c;while((c=pm.read()) != -1){// 处理代码}pm.close();}catch(

  在读取大型文件或者其它大批量数据输入操作时,希望能够通过一个进度条显示当前的进度,现在在java中非常轻易实现,仅仅需要几行代码即可。Java的swing包提供了PRogressMonitorInputStream类,该类提供了自动地弹出进度窗口和事件处理机制。
  
  使用这个类也非常方便,只需要把任何一个InputStream作为参数,构造一个新的ProgressMonitorInputStream类,其它不需要任何额外的代码,即可实现进度窗口的自动生成。ProgressMonitorInputStream类可以和其它InputStream一样使用。
  
  ProgressMonitorInputStream类继续层次
  
  [pre]java.lang.Object
  
  +--java.io.InputStream
  
  +--java.io.FilterInputStream
  
  +--javax.swing.ProgressMonitorInputStream[/pre]
  
  构造方法
  
  ProgressMonitorInputStream
  (Component parentComponent,
  Object message, InputStream in)
  parentComponent - 触发被监视操作的组件
  message - (假如弹出进度显示窗口),
  显示在进度显示窗口中的指示信息
  in - 需要监视的输入流
  
  操作方法
  
  除了在InputStream和FilterInputStream中继续的方法外,还增加了如下方法:
  
  ProgressMonitor getProgressMonitor()
  //得到当前对象使用的ProgressMonitor对象。
  int read()
  int read(byte[] b)
  int read(byte[] b, int off, int len)
  void reset()
  long skip(long n)
  //上面几个方法都是覆盖了FilterInputStream中的方法,
  因为需要更新进度指示。
  void close()
  //因为需要关闭进度监视对象和窗口,
  所以覆盖了FilterInputStream父类中的close方法。
  
  示例代码:
  
  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;
  
  public class ProgressMonitorTest
  {
  public static void main(String[] args)
  {
  // 创建一个包含“Click me”的窗口
  final JFrame f =
  new JFrame("ProgressMonitor Sample");
  f.getContentPane().setLayout(new FlowLayout());
  JButton b = new JButton("Click me");
  f.getContentPane().add(b);
  f.pack();
  
  // 设置按钮的动作事件
  b.addActionListener(new ActionListener()
  {
  public void actionPerformed(ActionEvent e)
  {
  // 这儿使用了新的线程处理按钮的动作事件,
  因为我们需要
  //主窗口的线程响应用户。这样你可以多次点击该按钮,
  //会启动多个读取文件的线程。主窗口也保持响应。
  new Thread()
  {
  public void run()
  {
  try {
  // 打开文件输出流,
  
  把InputStream包装在ProgressMonitorInputStream中。
  //在当前目录中需要放置一个大文件,建议超过50M
  InputStream in = new FileInputStream("bigfile.dat");
  ProgressMonitorInputStream pm =
  new ProgressMonitorInputStream(f,"Reading a big file",in);
  // 读取文件,假如总耗时超过2秒,
  将会自动弹出一个进度监视窗口。
  //  显示已读取的百分比。
  int c;
  while((c=pm.read()) != -1)
  {
  // 处理代码
  }
  pm.close();
  }
  catch(Exception ex)
  {
  ex.printStackTrace();
  }
  }
  }.start();
  }});
  
  // 设置缺省的窗口关闭行为,并显示窗口。
  f.setDefaultCloSEOperation
  (JFrame.EXIT_ON_CLOSE);
  f.setVisible(true);
  }
  }

Tags:怎样 Java 实例

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接