本人最近编写一个下载网络资源的程序,在文本框输入URL,然后点击“下载”按钮就触发以下事件,我在每次把缓冲区的内容写入文件后,都获得当前已下载文件的大小,并让他与总文件大小作比较,从而求出百分比。然后再通过setValue(),设置进度条的进度。可是进度条就是没反应,请高手指点。(还有一个附加问题,如果有两个事件触发源,当一个事件触发运行,还没结束时,另一个事件又被触发,如何使这两个被触发的事件同时运行。)
         private javax.swing.JButton Bxiazai;
private javax.swing.JLabel JL1;
private javax.swing.JLabel JL2;
private javax.swing.JProgressBar PB;//= new javax.swing.JProgressBar();
private javax.swing.JTextField T1;
//Timer timer=new Timer(100,this);
public long fileLength;
File file;
long length=0;
         JL1 = new javax.swing.JLabel();
         T1 = new javax.swing.JTextField();
Bxiazai = new javax.swing.JButton();
PB = new javax.swing.JProgressBar();
JL2 = new javax.swing.JLabel();
PB.setMinimum(0);
PB.setMaximum(100);
PB.setOrientation(JProgressBar.HORIZONTAL);
PB.setValue(0);
PB.setStringPainted(true);
PB.setBorderPainted(true);
PB.setBackground(Color.pink);public void actionPerformed(ActionEvent e) {

if(e.getSource()==Bxiazai) {
//PB.setValue(60);
   // timer.start();
urlString=T1.getText();

URL url2;
try {
url2 = new URL(urlString);

FileOutputStream fos = null; 
  BufferedInputStream bis = null; 
  HttpURLConnection httpurl = null; 
 
  byte[] buf = new byte[1024]; 
  int size = 0;  //  建立链接 
 
  httpurl = (HttpURLConnection) url2.openConnection(); 
//  连接指定的资源 
  httpurl.connect(); 
//  获取网络输入流 
  bis = new BufferedInputStream(httpurl.getInputStream()); 
//  建立文件 
  String path=new String(url2.getPath());
  String a[] = path.split("/"); 
  fos = new FileOutputStream(a[a.length-1]); 
//  保存文件 

fileLength=(long)httpurl.getContentLength(); //获得要下载的网络文件的大小

while ( (size = bis.read(buf)) != -1) 
  {
  fos.write(buf, 0, size);
     File file=new File(a[a.length-1]);    //获得已下载文件的大小
     int i=(int)Math.floor(file.length()/fileLength*100); //获得已下载的百分比
     PB.setValue(i);
     
  } 
  
  fos.close(); 
  bis.close(); 
  httpurl.disconnect(); 

    JOptionPane.showMessageDialog(this,"文件下载成功","提示", JOptionPane.INFORMATION_MESSAGE);
   } 
   catch (IOException err) { 
   JOptionPane.showMessageDialog(this,"文件下载失败","提示", JOptionPane.ERROR_MESSAGE);
   }   
 


}  
     
}

解决方案 »

  1.   

    你一直在这里占用CPU下载的文件,然后就告诉他说:“给我更新一下进度条,但是不给你时间,因为我还得要你继续给我下文件呢。”你认为你的CPU有时间去更新画面么?虽然你给他传了很多次值!
      

  2.   

    不是说了嘛,你占用的cpu现在就是用来写文件呢!要不您现在用它干嘛呢?
      

  3.   

    这样啊,我还以为你说的是,连接,获得网络资源那里占用了CPU。是不是应该理解为,读取网络资源跟写入文件这过程不能间断,所以CPU不能去干别的事啊?