我回答了无数这样的问题了:
在程序中,如果用到了swing包中的组件,总会出现这样的情况------要等完全执行完后才能正确显示(不一定在构造函数当中,包括监听函数里)。
例如:
try
{
for (int i = 0; i < 100; i++) {
jProgressBar1.setValue(i);
Thread.sleep(500);
}
}
catch
(Exception ee)
{}
为什么只有循环执行完了以后才设置进度条??
首先解决方法如下:
new
Thread()
{
public void run()
{
try {
for (int i = 0; i < 100; i++) {
jProgressBar1.setValue(i);
Thread.sleep(500);
}
} catch (Exception ee) {}
}
}
.start();
这都是SWING包的线程问题:swing包有一个特点,基于线程不安全特性。可以理解为:如果一个函数没有正确return之前,swing的显示是不会响应的,如果执行时间长,甚至会像死机一样没有响应。原因是该函数和主函数的执行处于同一线程上,该函数的执行占用了CPU的执行时间片。
因此,建议所有需要同步显示结果的同行们用如下格式调用(原理重新开启一个线程):
new
Thread()
{
public void run(){
//这里是要执行的内容
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
}
.strat();
在程序中,如果用到了swing包中的组件,总会出现这样的情况------要等完全执行完后才能正确显示(不一定在构造函数当中,包括监听函数里)。
例如:
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
为什么只有循环执行完了以后才设置进度条??
首先解决方法如下:
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
这都是SWING包的线程问题:swing包有一个特点,基于线程不安全特性。可以理解为:如果一个函数没有正确return之前,swing的显示是不会响应的,如果执行时间长,甚至会像死机一样没有响应。原因是该函数和主函数的执行处于同一线程上,该函数的执行占用了CPU的执行时间片。
因此,建议所有需要同步显示结果的同行们用如下格式调用(原理重新开启一个线程):
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)