How to destroy Window



  • There's a window, when you press the button, the window should close and be destroyed. How do you know that method Window.getOwnerlessWindows() Reverts references to any Window ever created (including the reference to the destroyed window). Then destroy Window?

    This is an example:

    package javaapplication28;
    

    import java.awt.Window;
    import javax.swing.JFrame;

    public class JavaApplication28 {

    public static void main(String[] args) {
        //
        final JFrame frame = new JFrame("TEST");
        frame.pack();
        frame.setVisible(true);
    
    
    
        //
    
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {}
    
                //КРУГ 1, УЗНАЕМ НАШИ ФРЕЙМЫ
                Window[] wind = Window.getOwnerlessWindows();
    
                int a = 0;
                int max = wind.length;
    
    
                System.out.println("Ссылки на фреймы до уничтожения");
                while(a!=max){
                    System.out.println(wind[a].getClass().getCanonicalName());
                    ((JFrame)wind[a]).setTitle(((JFrame)wind[a]).getTitle().concat(" КРУГ 1"));
                    a = a + 1;
                }
                //
    
    
                //ПЫТАЕМСЯ УБИТЬ
                frame.dispose(); //УБИЛИ ОКНО
                System.gc(); //НА ВСЯКИЙ
                //
    
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                }
    
                //КРУГ 2, ПОЛУЧАЕМ ССЫЛКУ НА ФРЕЙМ КОТОРЫЙ УБИТ, И ПОКАЗЫВАЕМ ЕГО ФРЕЙМ)
                wind = Window.getOwnerlessWindows();
                a = 0;
                max = wind.length;
    
                System.out.println("Ссылки на фреймы после уничтожения");
                while(a!=max){
                    System.out.println(wind[a].getClass().getCanonicalName());
                    ((JFrame)wind[a]).setTitle(((JFrame)wind[a]).getTitle().concat("КРУГ 2"));
                    wind[a].setVisible(true);
                    a = a + 1;
                }
                //В ИТОГЕ ДОЛЖНО ПОЛУЧИТСЯ TEST, КРУГ1, КРУГ2 В TITLE (и мы знаем сколько наш фрейм прошел кругов)в видимом убитом окне)
            }
        }).start();
    
    }
    

    }



  • frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    

    If you need to close the app

    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    

    but the gc won't clear it because there's a link to this object, it's got to be removed from the variable.

    frame = null;




Suggested Topics

  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2