Duvida sobre como fechar um frame

Boa noite, preciso fechar um jdialog automaticamente apos 15 segundos dele ser aberto automaticamente… como faco isso? Pensei em colocar uma thread… Mais como posso fazer isso?
Obrigadaa!

Coloca este método dentro do dialog e verifica se resolve

private void formWindowOpened(java.awt.event.WindowEvent evt) {                                  
        if (this.fechamentoaut) {
            try {
                Thread.sleep(tempoFechamento); // tempo, no seu caso fica 15000
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
            this.dispose();
        }
    }       

Isso não vai funcionar porque trava todo o Swing dentro desse Thread.sleep.

Se precisar algo semelhante a isso, use um javax.swing.Timer, não um Thread.sleep. Além disso, você precisa levar em tempo se a pessoa começa a digitar alguma coisa dentro dele - ou seja, só use para diálogos que mostram uma mensagem, como um botão de OK / Cancel.

Reaproveite este exemplo aqui para suas necessidades.

package guj;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.Timer;
import javax.swing.border.EmptyBorder;

public class JDialogTemporizado extends JDialog {

    private final JPanel contentPanel = new JPanel();

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        try {
            JDialogTemporizado dialog = new JDialogTemporizado();
            dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
            dialog.setVisible(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Create the dialog.
     */
    public JDialogTemporizado() {
        initComponents();
    }

    private Timer timer;
    private JLabel lblcliqueOkEm;
    private JPanel panel;
    private JButton btnOk;
    private JButton btnCancel;

    private Timer getTimer() {
        if (timer == null) {
            timer = new Timer(10000, new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    timer.stop();
                    JDialogTemporizado.this.dispose();
                }
            });
        }
        return timer;
    }

    private void initComponents() {
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowOpened(WindowEvent e) {
                getTimer().start();
            }
        });
        setTitle("Leia isto em 10 segundos!");
        setBounds(100, 100, 450, 300);
        getContentPane().setLayout(new BorderLayout());
        contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
        getContentPane().add(contentPanel, BorderLayout.CENTER);
        contentPanel.setLayout(new BorderLayout(0, 0));
        contentPanel.add(getLblcliqueOkEm(), BorderLayout.CENTER);
        contentPanel.add(getPanel(), BorderLayout.SOUTH);
    }

    private JLabel getLblcliqueOkEm() {
        if (lblcliqueOkEm == null) {
            lblcliqueOkEm = new JLabel(
                    "<html><center>Mensagem muito comprida, <br/>que deve ser lida em 10 segundos.<br/> Se precisar de mais tempo, <br/> clique em <i>Mais tempo para ler<i/>.</center></html>");
            lblcliqueOkEm.setHorizontalAlignment(SwingConstants.CENTER);
        }
        return lblcliqueOkEm;
    }

    private JPanel getPanel() {
        if (panel == null) {
            panel = new JPanel();
            panel.add(getBtnOk());
            panel.add(getBtnCancel());
        }
        return panel;
    }

    private JButton getBtnOk() {
        if (btnOk == null) {
            btnOk = new JButton("Mais tempo para ler");
            btnOk.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    getTimer().restart();
                }
            });
        }
        return btnOk;
    }

    private JButton getBtnCancel() {
        if (btnCancel == null) {
            btnCancel = new JButton("Fechar");
            btnCancel.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    getTimer().stop();
                    JDialogTemporizado.this.dispose();
                }
            });
        }
        return btnCancel;
    }
}

entanglement, eu tenho uma tela que utilizo na venda de cartão de credito que utiliza este código postado. Até agora não tive problema. Até vou fazer alguns testes para tentar pegar algum erro.

Isso não invalida o fato de que está conceitualmente errado.

Isso não aparece como um “erro” e sim como um travamento do Swing.

Por exemplo, o tal JDialog não pode ser fechado nem os botões funcionam dentro desse intervalo de 10 segundos, se usar o código que você escreveu.

(Como você provavelmente deve ter um diálogo com tempo curto de duração e que não pode ser cancelado, não deve ter percebido o que ocorria.)

Evite sempre usar Thread.sleep dentro da thread principal do Swing.

maravilha. No meu caso o usuário não pode mexer mesmo neste periodo. Mas valeu o dica. Obrigado!