我设计的程序里的Bug:
触发一个事件的时候调用一个JFrame!
如点击该学生信息时当多次触发这个事件,就调用同一个JFrame并显示多个该学生界面。
如何屏蔽这样的问题。
如果该JFrame已显示,不再调用显示同一界面。

解决方案 »

  1.   

    LZ为什么不使用JDialog?效果应该可以做到和你的JFrame一样 因为JDialog和JFrame是同一级的容器 而且JDialog在关闭当前这个时 是不能再去打开其他的JDialog的
      

  2.   

    我的想法是定义一个ID,如:public static final String ID = JFrame.class.getName();
    然后调用这个JFrame时,先根据ID拿到这个JFrame对象,若为空,则show(),否则dipose()。
      

  3.   

    同感,设置dialog的模态,可以解决那个问题
      

  4.   

    在你调用该JFrame对象的setVisible()之前检查 该对象是否为null,调用isDisposed()方法检查是否已经被Dispose掉了.,并调用isVisible()检查是否已经可见.通过以上的检查,分不同的情况来处理,完全可以解决你的问题.同时说下我没有推荐JDialog,设置模态的方式.有时候我们需要同时显示多个不同的人的时候.如果被设置为了模态,那么就没有办法了
      

  5.   

    打开之前先判断JFrame对象是不是null,是null再打开
      

  6.   

    先把所有的窗体类名添加到一个Map中:
    下面是一个JInternalFrame例子,希望对你有所启发,包com.mycompany.internalframe内有许多JInternalFrame窗体
    // 获取内部窗体的唯一实例对象
    private JInternalFrame getIFrame(String frameName) {
    JInternalFrame jf = null;
    if (!ifs.containsKey(frameName)) {
    try {
    Class fClass = Class.forName("com.mycompany.internalframe."
    + frameName);
    Constructor constructor = fClass.getConstructor(null);
    jf = (JInternalFrame) constructor.newInstance(null);
    ifs.put(frameName, jf);
    } catch (Exception e) {
    e.printStackTrace();
    }
    } else
    jf = ifs.get(frameName);
    return jf;
    }