服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

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


  在读取大型文件或者其它大批量数据输入操作时,希望能够通过一个进度条显示当前的进度,现在在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);
  }
  }

扫描关注微信公众号