由于我的程序中有一个处理用的时间十分长,要十几秒,所以我想在处理前弹出一张写有“处理中,请等待”的图片,由于在程序一开始我有个启动界面,所以我认为只要用这个启动界面一样的方法就可以实现这个功能了,但是在运行中,图片总是显示不完全,字完全显示不出来,只显示底色,就像死住一样了,等到那个处理完了,图片也不显示完整,可能是什么问题呢?
这个是启动界面类:
public class Loading {
  JWindow window;  public Loading(int i) {
    Toolkit toolkit = Toolkit.getDefaultToolkit();
    window = new JWindow();
    Container c = window.getContentPane();
    Icon icon;
    if (i == 1) {
      icon = new ImageIcon(java.awt.Toolkit.getDefaultToolkit().
                 getImage(getClass().getResource("/icon/picture1.png")));
    } else if (i == 2){
      icon = new ImageIcon(java.awt.Toolkit.getDefaultToolkit().
                 getImage(getClass().getResource("/icon/picture2.png")));
    } 
    int width = icon.getIconWidth();
    int height = icon.getIconHeight();
    Dimension screenSize = toolkit.getScreenSize();
    JLabel lbl = new JLabel(icon);
    c.add(lbl);
    window.pack();
    window.setLocation(screenSize.width / 2 - width / 2,
                       screenSize.height / 2 - height / 2);
  }  public void show() {
    window.setVisible(true);
  }  public void dispose() {
    window.setVisible(false);
    window.dispose();
  }
}
在启动界面时候我是这样用的(效果完全正常):
Loading ld = new Loading(1);
ld.show();
inintial();//这个是初始化函数
ld.dispose();
在那个十几秒的处理时候我是这样用的(效果只显示图片picture2的底色,就像死住一样):
Loading ld = new Loading(2);
ld.show();
PileUp();//这个是那个处理
ld.dispose();

解决方案 »

  1.   

    private class loading extends Thread{
    public void run()
    {
    //输出图片
    }
    }private class jisuan extends Thread{
    public void run()
    {
    //处理计算等
    }
    }调用的时候new jisuan().start();
    new loading().start();这样应该可以
      

  2.   

    问题是除非把Loading类和处理都做成线程,但是那个处理的过程中已经用到了线程了,不可能再把这个处理做成一个线程,我曾经试图把那个Loading类做成一个线程,但是没有用。