Destruindo o Frame anterior

Boa Tarde Pessoa
To com uma duvida, quero implementar um evento que quando eu clicar no botão OK ele abra um novo frame e destrua o frame anterior, só que usando o frame.dispose não funciona, ele dá erro.

Ajuda??

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;


public class UI1 extends JFrame{
	JButton bt1;
	JButton bt2;
	JTextField txt1;
	JPasswordField txt2;
	JLabel rot1;
	JLabel rot2;
	
	
	public UI1(){
		rot1 = new JLabel("Usuário");
		rot2 = new JLabel("Senha");
		
		txt1 = new JTextField(8);
		txt2 = new JPasswordField(12);
		
		bt1 = new JButton("OK");
		bt2 = new JButton("Cancelar");
		
		Container container = getContentPane();
		container.setLayout(new FlowLayout());
		container.add(rot1);
		container.add(txt1);
		container.add(rot2);
		container.add(txt2);
		container.add(bt1);
		container.add(bt2);
		bt1.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e ){
				frame.dispose();
			}
		});
		this.setSize(200, 200);
		this.setVisible(true);
		this.setLocationRelativeTo(null);
		
	}
	
	
public static void main (String[]args){
		UI1 ui1 = new UI1();
	}
}

É q vc está chamando dispose() na variável “frame”, que não existe no seu código. Vc quer chamar na instância de UI1 (a sua janela), então faça assim:

Complementando: também faça no construtor a seguinte chamada:

Senão ele vai destruir o frame quando clicar em OK mas não vai destruir se clicar no X de fechar!

OLÁ,
como o MarkKnopfler falou,

this.dispose();//coloque do jeito que ta aqui, dentro do evento do seu botão que vai dar a instrução para fechar e abrir o outro. new NoneDaNovaTela().setVisible(true);//não coloque o nome frame, ponha o nome da nova Jframe que será aberta (por ex.:UI1 que é a tela atual, só que você deve colocar o nome da nova tela).