栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在下载文件时使用swing GUI显示进度条

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在下载文件时使用swing GUI显示进度条

您的是经典的Swing并发问题。解决方案始终如一-在后台线程中运行长时间的代码,例如可以在SwingWorker中找到的代码。

例如,

import java.awt.FlowLayout;import java.beans.PropertyChangeEvent;import java.beans.PropertyChangeListener;import java.io.*;import java.net.HttpURLConnection;import java.net.URL;import java.util.concurrent.ExecutionException;import javax.swing.Jframe;import javax.swing.SwingWorker;import static javax.swing.Jframe.EXIT_ON_CLOSE;import javax.swing.JProgressBar;public class Downloader {   public Downloader(String site, File file) {      Jframe frm = new Jframe();      final JProgressBar current = new JProgressBar(0, 100);      current.setSize(50, 100);      current.setValue(0);      current.setStringPainted(true);      frm.add(current);      frm.setVisible(true);      frm.setLayout(new FlowLayout());      frm.setSize(50, 100);      frm.setDefaultCloseOperation(EXIT_ON_CLOSE);      final Worker worker = new Worker(site, file);      worker.addPropertyChangeListener(new PropertyChangeListener() {         @Override         public void propertyChange(PropertyChangeEvent pcEvt) { if ("progress".equals(pcEvt.getPropertyName())) {    current.setValue((Integer) pcEvt.getNewValue()); } else if (pcEvt.getNewValue() == SwingWorker.Statevalue.DONE) {    try {       worker.get();    } catch (InterruptedException | ExecutionException e) {       // handle any errors here       e.printStackTrace();     } }         }      });      worker.execute();   }}class Worker extends SwingWorker<Void, Void> {   private String site;   private File file;   public Worker(String site, File file) {      this.site = site;      this.file = file;   }   @Override   protected Void doInBackground() throws Exception {      URL url = new URL(site);      HttpURLConnection connection = (HttpURLConnection) url .openConnection();      int filesize = connection.getContentLength();      int totalDataRead = 0;      try (java.io.BufferedInputStream in = new java.io.BufferedInputStream( connection.getInputStream())) {         java.io.FileOutputStream fos = new java.io.FileOutputStream(file);         try (java.io.BufferedOutputStream bout = new BufferedOutputStream(    fos, 1024)) { byte[] data = new byte[1024]; int i; while ((i = in.read(data, 0, 1024)) >= 0) {    totalDataRead = totalDataRead + i;    bout.write(data, 0, i);    int percent = (totalDataRead * 100) / filesize;    setProgress(percent); }         }      }      return null;   }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/509395.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号