本帖最后由 tcmis 于 2012-04-10 10:16:04 编辑

解决方案 »

  1.   

    如果这些弹出窗口是一样的,也就是同一个类的不同对象,那么用一个ArrayList把所有打开的窗口的引用保存起来,想要知道打开了多少窗口就获取ArrayList的容量,一次性关掉就用一个循环调用所有窗口的关闭方法如果这些弹出窗口不是同一个类的对象,那么定义一个父类或一个接口,在父类或接口里面定义关闭窗口的方法,由子类重写这个方法,用一个父类或接口类型为变量的容器:ArrayList<父类>或ArrayList<接口>,保存所有弹出窗口的引用,获取程序打开多少窗口和关闭所有窗口方法同上
      

  2.   

    参考下下面的代码吧public class TestJframe extends JFrame {
    private List frames;
    private static int count = 0; @SuppressWarnings("unchecked")
    public TestJframe() throws HeadlessException {
    super();
    setTitle("自动弹出自动关闭测试");
    setSize(400, 500);
    setVisible(true);
    frames = new ArrayList();
    addWindowListener(new WindowAdapter() { @Override
    public void windowClosed(WindowEvent e) {
    System.exit(1);
    } });
    final Thread start = new Thread() {
    @Override
    public void run() {
    JFrame temp = null;
    try {
    while (!isInterrupted()) {
    frames.add(temp = new JFrame("JFrame" + (++count)));
    temp.setBounds(count * 20, 30, 200, 300);
    temp.setVisible(true);
    TimeUnit.SECONDS.sleep(2);
    }
    } catch (InterruptedException e) {
    System.out.println("线程异常终止");
    }
    } };
    start.start();
    new Thread() { @Override
    public void run() {
    try {
    TimeUnit.SECONDS.sleep(20);
    start.interrupt();
    start.join();
    for (Object item : frames) {
    ((JFrame) item).dispose();
    }
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    } }.start();
    } public static void main(String[] args) {
    new TestJframe();
    }
    }