java进度条(java后台实现进度条)
一、java编程:怎么写进度条高手进哈
进度条有三种思路:
1.人为的划分某些标识,达到某个标识就是完成了百分之多少。
2.如果是上传和下载附件,可以将文件大小作为100%,上传或下载百分之多少,就是百分之多少。
3.对进度的类型所需时间进行分类。划出几种时间。属于某类,大概或平均完成时间是多少,那么就以这个时间作为100%。然后产生进度。
但,完美的进度是不可能实现的,因为你总不能先跑一遍确定时间。而且就算完全相同的条件,跑两遍的时间也不能一定相等的。所以我们只能通过各种技巧来使进度条更加自然真实。
最后,现在很多地方都不用进度条了,全部都是一个转动的圆圈等等。因为当你进度卡在10%半个小时,然后瞬间涨到99%,进度条已经就没什么意义了。
二、Java中如何实现进度条效果
代码如下:import java.awt.Color; import java.awt.Toolkit; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JProgressBar; import javax.swing.JWindow;@SuppressWarnings("serial") public class Demo extends JWindow implements Runnable{//定义加载窗口大小 public static final int LOAD_WIDTH= 455; public static final int LOAD_HEIGHT= 295;//获取屏幕窗口大小 public static final int WIDTH= Toolkit.getDefaultToolkit().getScreenSize().width; public static final int HEIGHT= Toolkit.getDefaultToolkit().getScreenSize().height;//定义进度条组件 public JProgressBar progressbar;//定义标签组件 public JLabel label;//构造函数 public Demo(){//创建标签,并在标签上放置一张图片 label= new JLabel(new ImageIcon("images/background.jpg")); label.setBounds(0, 0, LOAD_WIDTH, LOAD_HEIGHT- 15);//创建进度条 progressbar= new JProgressBar();//显示当前进度值信息 progressbar.setStringPainted(true);//设置进度条边框不显示 progressbar.setBorderPainted(false);//设置进度条的前景色 progressbar.setForeground(new Color(0, 210, 40));//设置进度条的背景色 progressbar.setBackground(new Color(188, 190, 194)); progressbar.setBounds(0, LOAD_HEIGHT- 15, LOAD_WIDTH, 15);//添加组件 this.add(label); this.add(progressbar);//设置布局为空 this.setLayout(null);//设置窗口初始位置 this.setLocation((WIDTH- LOAD_WIDTH)/ 2,(HEIGHT- LOAD_HEIGHT)/ 2);//设置窗口大小 this.setSize(LOAD_WIDTH, LOAD_HEIGHT);//设置窗口显示 this.setVisible(true);} public static void main(String[] args){ Demo t= new Demo(); new Thread(t).start();}@Override public void run(){ for(int i= 0; i< 100; i++){ try{ Thread.sleep(100);} catch(InterruptedException e){ e.printStackTrace();} progressbar.setValue(i);} JOptionPane.showMessageDialog(this,"加载完成"); this.dispose();}}效果图:
三、java上传Excel文件,如何实现进度条显示
您好,1、开发简单,由于要定时起一个HTTP连接去获得进度信息,因此,发生的连接请求也增多,另外,在低速的情况下,常常会出各种各样的BUG,网络环境的差异,还造成那个周期很难选择。 2、开发较复杂,COMET本身需要服务器的支持,这样TOMCAT至少得选6.0,否则服务器长连接,压力肯定受不了,但是,性能相对好一些,由于一次上传实际上只启动了两个HTTP链接请求,比起AJAX来说,那是要少很多请求了。另外一个优点是,COMET将使得服务器可以主动将进度情况汇报给客户端,因此,客户端的进度条相对来说,要准确一点。 3、目前看来解决方案最好的一个了,虽然开发需要涉及到 FLASH、JAVASCRIPT、以及 JAVA的开发,但是代码量都不是很多,因此,复杂程度相对属于中等程度。但是FLASH也有几个问题:第一、浏览器 FLASH版本兼容问题,第二、FLASH是通过获得发送数据的进度来体现进度条的,因此虽然不需要服务器端开发进度部分的代码,但是进度的展现有些不是很准确,经常会有一开始速度很快,但是后面越来越慢的情况。 4、就不说了,开发肯定是最麻烦的,但是进度条效果肯定是最好的,但要给每种浏览器都要搞个插件,还是比较痛苦的。总结一下,希望对大家有帮助。 2其实很麻烦的,之前试过,会有下面几个问题:第一、服务器端一定要选择支持HTTP长连接的服务器,否则操作系统的线程限制,会导致并发降低。第二、除非原来就采用的是COMET的进度方式,否则,你要把周期获得进度的方式,改成 COMET的方式,那很郁闷的,COMET要服务器主动把进度信息用JAVASCRIPT的方式发回客户端,所以需要把结构转化为JAVASCRIPT调用才行。第三、对于不同的浏览器,处理 JAVASCRIPT的方式是不一样的,我试验的结果是,IE会在收到一定数量的JAVASCRIPT之后才执行,所以虽然我在服务器端每次都调用了flush方法,但是界面上还是需要等一段时间才能响应。而这段时间又不好控制了,因为上传文件大小的不一样,导致了下发的JAVASCRIPT数量也不一样,所以基本很难达到FLASH那样的效果。其实如果已经决定采用flash了,那就不需要再去修改服务器端的代码了,因为那个进度信息服务器发不发都不会影响到代码的执行,反正FLASH本身已经提供了进度指示了,所以,说简单地,要改成FLASH上传,你直接做个FLASH客户端就好了,不需要再改服务器端了。对了,还有一种情况需要改服务器端,那就是FLASH上传多个文件是采用多线程上传的,因此如果你一次上传多个文件,那就需要改服务器端了。需要在所有线程上传完成的情况下,再去修改数据库。