本意是  按start按钮 开始弹出一个窗口内带一gif图片 一边打印 同时图片能动  打印完  窗口消失但是 ,现在只能看到弹出窗体 但不显示任何东西????   
 import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.*;public class Test123 {
public static void main(String[] args) {
JFrame f = new JFrame();
JButton b = new JButton("Start");
b.addActionListener(new moto());
f.setBounds(400, 400, 300, 300);
f.add(b);
f.setVisible(true);

}
}class moto implements ActionListener { public void actionPerformed(ActionEvent arg0) {
JFrame d = new JFrame();
d.setBounds(200, 400, 200, 200);
d.add(new JLabel(new ImageIcon(".\\image\\ding.gif")));
d.setVisible(true);

for (int i=0; i<10;i++) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(""+i);
}
d.setVisible(false);
}
}

解决方案 »

  1.   

    楼主把try {
    Thread.sleep(500);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }去掉就可以达到你想要的效果了!
      

  2.   

    把d.setVisible(false);注释掉就很容易检测出上面程序的错误之处.
       当Thread  sleep的时候,阻塞了图片的加载...
      

  3.   

    A主线程 
    B线程(B开启显示窗口)[B线程可以堵塞A的]
    C后台操作线程整理好这3个调用的先后 关系 就OK了
      

  4.   


    去掉后还是不行  他要等for循环完了 才能出现 gif图片
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.*;public class Test123 {
    public static void main(String[] args) {
    JFrame f = new JFrame();
    JButton b = new JButton("Start");
    b.addActionListener(new moto());
    f.setBounds(400, 400, 300, 300);
    f.add(b);
    f.setVisible(true);

    }
    }class moto implements ActionListener { public void actionPerformed(ActionEvent arg0) {
    JFrame d = new JFrame();
    d.setBounds(200, 400, 200, 200);
    d.add(new JLabel(new ImageIcon(".\\image\\ding.gif")));
    d.setVisible(true);

    for (int i=0; i<1000000;i++) {
    System.out.println(""+i);
    }
    }
    }
      

  5.   

    我用线程试过了 效果和上面的一样  当然只用两个线程  三个线程的话 怎样加 第三个呢 ??   
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.*;public class Test123 {
    public static void main(String[] args) {
    JFrame f = new JFrame();
    JButton b = new JButton("Start");
    b.addActionListener(new moto());
    f.setBounds(400, 400, 300, 300);
    f.add(b);
    f.setVisible(true);

    }
    }class moto implements ActionListener { public void actionPerformed(ActionEvent arg0) {
           Thread t = new MyThread();
           t.start();
    for (int i=0; i<500000;i++) {
    System.out.println(""+i);
    }
    }
    }class MyThread extends Thread {
    public void run() {
    JFrame d = new JFrame();
    d.setBounds(200, 400, 200, 200);
    d.add(new JLabel(new ImageIcon(".\\image\\ding.gif")));
    d.setVisible(true);
    }
    }
      

  6.   

    A 是正常运行的主线程B 被A调用的线程[或者窗体](用模式化窗口 或者 B。JOIN() 来堵塞A
    [不堵塞也没有关系,如果B的运行对A没直接影响])B中调用C线程来 进行实际的后台操作(C可能会调用B的资源。。比如在B中显示当前处理进程, 
    C可以设计成B的内部类 方便访问B的资源)
    [B和C如果是同一个线程 则 在C处理完以前 B是不可能有机会刷新显示的]B和C的 合作方式 就是一个后台操作 +界面显示机制 A只是让B启动出来如果只用2个线程的话 则 不需要A 直接 从B开始启动