Comunicação entre objetos

Olá…
Eu tenho o seguinte problema.
Tenho um JFrameA e um JFrameB.
O JFrameA chama o JFrameB, porém o JFrameB deve retornar um valor ao JFrameA após finalizar-se.
Como eu faço para receber o valor no JFrameA depois que o JFrameB finalizar. Seria uma especie de chamada assincrona, onde o JFrame a fica esperando a finalização do JFrameB para receber um valor?

Em java, a passagem de parâmetros. de objetos é sempre por referência(não considera String pq String tem um comportamento diferente). Portanto, se tu quiser retornar um valor do jframe B para A, ao chamar o JFrame B, passe um objeto, e defina o valor desse objeto em B. Assim, quando tu voltar para A, teu objeto vai estar com o valor definido. Isso pq tu passou apenas uma referência a um endereço de memória, e não o valor relativo ao objeto.

Fernando Rosa

Ao invés de um JFrame no Frame B, use um JDialog.

Torne esse JDialog modal. Isso garante que o comando frameB.setVisible(true), usado no frameA, só retorne depois que o frameB fechar.

Depois disso, é só fazer o que o colega falou. Usar o FrameB como um objeto normal. Define alguma propriedade nele com o valor que você quer e depois leia no frame A:

Vaja o exemplo abaixo.
Seria de um Dialog para ler um usuário. E o FrameA mostra os usuários já cadastrados.
Os códigos estão incompletos, mas já dão a noção de como fazer.

No frame B:

[code]
public class NewUserDialog extends JDialog
{
private User user;

public SomeDialog() {
   super();
   setModal(true);
   setTitle("Novo usuário");
   //resto do código aqui.
   user = null;
}

//Retorna o usuário preenchido na dialog.
public User getUser() {
   return user;
}

//---- Ações chamadas em botões
private void onCancel() {
   dispose(); //user ainda é null.
}

private User onOk() {
   if (!validaCampos()) //Valida os campos do formulário
      return; //Não confirma
   user = newUserFromFields(); //Cria um novo usuário com base nos campos preenchidos
}

}[/code]

No Frame A:

[code]public void UserFrame {
//Aqui vai a criação do JFrame, contendo a lista de usuários e botões de
//inserir, remover, etc.

   //Chamado quando se clica no botão de novo usuário
   public void onNewUser() {
       NewUserDialog dialog = new NewUserDialog();
       dialog.setVisible(true);
       if (dialog.getUser() == null)
          return; //Usuário cancelou a inserção
       //Caso contrário, põe ele na tabela de usuários.
       userTableModel.add(dialog.getUser());
    }

}[/code]

Valeu pelas dicas galera!