本人最近编写一个下载网络资源的程序,在文本框输入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);
}
}
}
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);
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货