我回答了无数这样的问题了:
在程序中,如果用到了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(){
//这里是要执行的内容

}
}
.strat();
在程序中,如果用到了swing包中的组件,总会出现这样的情况------要等完全执行完后才能正确显示(不一定在构造函数当中,包括监听函数里)。
例如:






为什么只有循环执行完了以后才设置进度条??
首先解决方法如下:











这都是SWING包的线程问题:swing包有一个特点,基于线程不安全特性。可以理解为:如果一个函数没有正确return之前,swing的显示是不会响应的,如果执行时间长,甚至会像死机一样没有响应。原因是该函数和主函数的执行处于同一线程上,该函数的执行占用了CPU的执行时间片。
因此,建议所有需要同步显示结果的同行们用如下格式调用(原理重新开启一个线程):





