偶用netbeans开发一个桌面程序,主界面是一个jfram窗体,上面添加了一个按钮A和一个jProgressBar进度栏B,偶的想法是:开始启动时,B是隐藏了的,窗口上只能看到按钮A,当一点击按钮A,A就变成灰色( A.setEnabled(false); ),B就显示出来,然后从服务器上下载文件,每下载到一个文件,就让B显示前进一个单位,代码如下:
private void AActionPerformed(java.awt.event.ActionEvent evt) {
A.setEnabled(false);
String[] files;int i=0,j=0;FTPClient client ;
client=new FTPClient();
try {
client.setRemoteHost(HostIp);
client.connect();
client.login(strUser, strPasswd);
client.setType(FTPTransferType.BINARY);
client.chdir(strRemtPath);
files=client.dir();
jProgressBar1.setValue(0);
jProgressBar1.setMaximum((int)files.length-2);
jProgressBar1.setVisible(true);
while(i <files.length){
if(files[i].charAt(0)!='.'){
client.get(strLocPath+"\\"+files[i],files[i]);j++;
jProgressBar1.setValue(j);
// jProgressBar1.invalidate();jProgressBar1.validate();
//jProgressBar1.updateUI();
// this.invalidate();this.validate();
//JOptionPane.showMessageDialog(this,"已成功从服务器上下载"+j+"个文件!", "文件下载结果", JOptionPane.INFORMATION_MESSAGE);
System.out.println(j+"\t"+files[i]+"\t");
}
i++;
}
}可实际程序运行后,点击了A按钮,并不会马上变灰,进度栏B也不能显示出来,更不能看到B在运行中前进了,好像界面死了一样,窗口没有刷新控件,但System.out.println(j+"\t"+files[i]+"\t"); 输出的数字却显示了程序在进行。直到程序运行完,才看到A变成灰色,B突然走到100%.偶尝试添加绿色被注释掉部分的代码,还是不行,费用用JOptionPane.showMessageDialog这样的办法,让程序在运行中停一下,才能看到A按钮变灰,进度栏B显示出来并前进了一些。可偶下的文件很多,用JOptionPane.showMessageDialog的方法对用户不友好,有什么板块可以解决呢TMD,java超级垃圾,一点都没VC好!
private void AActionPerformed(java.awt.event.ActionEvent evt) {
A.setEnabled(false);
String[] files;int i=0,j=0;FTPClient client ;
client=new FTPClient();
try {
client.setRemoteHost(HostIp);
client.connect();
client.login(strUser, strPasswd);
client.setType(FTPTransferType.BINARY);
client.chdir(strRemtPath);
files=client.dir();
jProgressBar1.setValue(0);
jProgressBar1.setMaximum((int)files.length-2);
jProgressBar1.setVisible(true);
while(i <files.length){
if(files[i].charAt(0)!='.'){
client.get(strLocPath+"\\"+files[i],files[i]);j++;
jProgressBar1.setValue(j);
// jProgressBar1.invalidate();jProgressBar1.validate();
//jProgressBar1.updateUI();
// this.invalidate();this.validate();
//JOptionPane.showMessageDialog(this,"已成功从服务器上下载"+j+"个文件!", "文件下载结果", JOptionPane.INFORMATION_MESSAGE);
System.out.println(j+"\t"+files[i]+"\t");
}
i++;
}
}可实际程序运行后,点击了A按钮,并不会马上变灰,进度栏B也不能显示出来,更不能看到B在运行中前进了,好像界面死了一样,窗口没有刷新控件,但System.out.println(j+"\t"+files[i]+"\t"); 输出的数字却显示了程序在进行。直到程序运行完,才看到A变成灰色,B突然走到100%.偶尝试添加绿色被注释掉部分的代码,还是不行,费用用JOptionPane.showMessageDialog这样的办法,让程序在运行中停一下,才能看到A按钮变灰,进度栏B显示出来并前进了一些。可偶下的文件很多,用JOptionPane.showMessageDialog的方法对用户不友好,有什么板块可以解决呢TMD,java超级垃圾,一点都没VC好!
因此你应该将下载部分作为一个县城,代码如下:new Thread()
{
public void run()
{
while(i <files.length)
{
if(files[i].charAt(0)!='.')
{
client.get(strLocPath+"\\"+files[i],files[i]);j++;
jProgressBar1.setValue(j);
System.out.println(j+"\t"+files[i]+"\t");
}
i++;
}
}
}.start();因为使用到了内部类,所以client和jProgressBar1得声明为final的,祝你好运。
真是受不了LZ了
在你前天的另一篇帖子中:
http://topic.csdn.net/u/20090524/16/953aa35e-7bc1-4122-ad50-380d05672c47.html
我都已经明明白白的给你解决方法了,你说我没看懂你的意思不就是进度条实时刷新么,放一个新的线程里,和你的下载线程分开