Null a passar objeto para outro frame

Estou tentando passar um objeto de um form para o outro em pequeno sistema, mas só me retorna null, na tela principal.
Quero passar dessa tela Estados para a de trás, que é o formulário principal do cadastro.

o que fiz foi isso. Quando clico no botão confirmar dos Estados ele faz isso

    int linha = jTableEstados.getSelectedRow();
    if (linha == -1) {
        System.out.println("Você precisa selecionar um estado");
        JOptionPane.showMessageDialog(this, "Você não selecionou nenhum estado", "Ops!", JOptionPane.INFORMATION_MESSAGE);

    } else {
        int codigoEstado = (int) jTableEstados.getValueAt(linha, 0);
        String uf = String.valueOf(jTableEstados.getValueAt(linha, 1));
        EstadoDao estadoDao = DaoFactory.createEstadoDao();
        Estado e=(estadoDao.findById(codigoEstado));
        
        estado2.setCodigoUF(e.getCodigoUF());
        estado2.setNome(e.getNome());
        estado2.setUf(e.getUf());

        
        System.out.println("completo" + estado2.getNome());
        System.out.println("completo" + estado2.getUf());
        System.out.println("completo" + estado2.getCodigoUF());
        
        this.dispose();
    }

na tela principal to chamando isso

ViewUF viewUF = new ViewUF();
estado = viewUF.getEstado2();
System.out.println(“Estado”+estado.getNome());

Eu até criei um estado2 e gerei getters e setters para ver se resolve, mas nao deu. Alguém tem alguma solução?

viewUF é a instância que está em execução quando a tabela para seleção está aberta?
Em que ponto do ViewUF você seta o atributo estado2, que até onde entendo, deveria ser devolvido pelo getEstado2()?

viewUF é essa tela da jtable que tá por cima;

crio ele aqui.

public class ViewUF extends javax.swing.JFrame {

/**
 * @return the estado2
 */
public Estado getEstado2() {
    return estado2;
}

/**
 * @param estado2 the estado2 to set
 */
public void setEstado2(Estado estado2) {
    this.estado2 = estado2;
}
        private Estado estado2 = new Estado();

/**
 * Creates new form ViewUF
 */
public ViewUF() {
    initComponents();
    listarUf();
}

Mas onde você invoca o setEstado2???

ah tinha esquecido de copiar ele.
Aqui

    int linha = jTableEstados.getSelectedRow();
    if (linha == -1) {
        System.out.println("Você precisa selecionar um estado");
        JOptionPane.showMessageDialog(this, "Você não selecionou nenhum estado", "Ops!", JOptionPane.INFORMATION_MESSAGE);

    } else {
        int codigoEstado = (int) jTableEstados.getValueAt(linha, 0);
        String uf = String.valueOf(jTableEstados.getValueAt(linha, 1));
        EstadoDao estadoDao = DaoFactory.createEstadoDao();
        Estado e=(estadoDao.findById(codigoEstado));
        
        estado2.setCodigoUF(e.getCodigoUF());
        estado2.setNome(e.getNome());
        estado2.setUf(e.getUf());

        
        System.out.println("completo" + estado2.getNome());
        System.out.println("completo" + estado2.getUf());
        System.out.println("completo" + estado2.getCodigoUF());
        
        this.dispose();
    }

Uma coisa que não está fazendo muito sentido é que… Quando você executa esta linha

Você está com a janela aberta, correto?
Porém, para executar esta

Você não espera a execução da janela, logo, você está obtendo um valor nulo, afinal, não é desse modo que deve ocorrer.
É o evento de selecionar a linha e, consequentemente, o estado, que deve disparar um evento no objeto principal (janela principal) e não o inverso.

Segue o raciocício:

  • Você abre a tela viewUF

    ViewUF viewUF = new ViewUF();

  • Então, você recupera o estado (janela principal)

    estado = viewUF.getEstado2();

  • Tenta printar algo

    System.out.println(“Estado”+estado.getNome());

Aqui já estoura o NPE. Enquanto isso, a viewUF está lá, aberta. Quando você define qual estado selecionou

estado2.setCodigoUF(e.getCodigoUF());
estado2.setNome(e.getNome());
estado2.setUf(e.getUf());

A exceção já aconteceu.

Eu chamo o ViewUF viewUF = new ViewUF(); quando eu clico no botão da lupa. Aí a tela viewUf é aberta com os estados. Aí quando eu clico no confirmar da viewUF ele pega os dados certinhos que foram selecionados. Porém não acesso eles da viewPrincipal que é a que vai realmente salvar no banco. Devo estar instanciando errado ou chamando errado na principal

Olha como você abre a janela viewUF:

Você não passa nenhuma referência à instância da janela principal. Como pretende acessar algo desse objeto se viewUF desconhece ele?

Consegui resolver assim. Chamei a viewUF assim que abro a principal, mas só dou um new ViewUF quando clico na lupa.

public class ViewCadastrarEstabelecimento extends javax.swing.JInternalFrame {

public static int codEstado;
public static String nomeEstado;
public static String uf;
public static int codMunicipio;
public static String nomeMunicipio;
public static int codBairro;
ViewUF viewUf;

public ViewCadastrarEstabelecimento() {
    initComponents();
    codEstado = 0;
    nomeEstado = null;
    uf = null;
}
private void jButtonChamarUFActionPerformed(java.awt.event.ActionEvent evt) {                                                
    viewUf= new ViewUF();
    viewUf.setAlwaysOnTop(true);
    viewUf.setLocationRelativeTo(null);
    viewUf.setVisible(true);


}                                               

private void jButtonSalvarEstabelecimentoActionPerformed(java.awt.event.ActionEvent evt) {                                                             
    System.out.println(viewUf.getEstado2().getCodigoUF());
    System.out.println(viewUf.getEstado2().getNome());
    System.out.println(viewUf.getEstado2().getUf());

}