Dúvida com Frame [Resolvido]

Olá pessoas…Alguém poderia me dizer como eu faço pra um Jframe X só abrir 1 vez? Caso contrário ele vai manda uma mensagem dizendo ao usuário que X já está em execução

Se for dentro da mesma aplicação, pode usar uma variável estática para armzenar a instância que já existe e mostrar para o usuário quando ele tentar abrir outra.
Se for tipo o Firefox que diz que uma instância está rodando caso o usuário tente abrir o programa duas vezes, pode fazer isso com um arquivo de lock.
Na hora que abrir a aplicação, cria um arquivo numa pasta específica com um nome específico, aí quando sair da aplicação, apagar o arquivo. Não precisa ter nada dentro.
E aí, toda hora que a aplicação abrir, antes de abrir o frame, procura pelo arquivo, se existir, mostra o dialog avisando o usuário que a aplicação já está aberta e sai.
Se não existir, abre normalmente.

vlw era bem isso mesmo…vo tenta implementa aqui :slight_smile:

Seguindo a linha de raciocínio do nosso amigo visola, segue um exemplo que eu fiz rapidinho :smiley:

[code]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.JFrame;
import javax.swing.JOptionPane;

public class FrameTeste extends JFrame
{
private static final long serialVersionUID = 1L;

private JButton botaoNovaTela = new JButton();

static boolean telaEstaAberta = false;

JFrame novaTela;

public FrameTeste()
{
	super("Tela de Teste");
	this.montaJanela();
}

public boolean criarUmaNovaTela()
{
	if (telaEstaAberta)
		return false;
	else
	{
		telaEstaAberta = true;
		novaTela = new JFrame();
		novaTela.setSize(640, 480);
		novaTela.setVisible(true);
		
		//evento que trata quando a tela eh finalizada
		novaTela.addWindowListener(new WindowAdapter() {
		    public void windowClosing(WindowEvent winEvt) {
		    	telaEstaAberta = false; 
		    }
		});
		
		return true;
		
		
	}
}

private void montaJanela()
{
	this.getContentPane().add(botaoNovaTela);
	
	botaoNovaTela.addActionListener(new ActionListener()
	{
		public void actionPerformed(ActionEvent arg0)
		{
			//cria uma nova tela
			if (!criarUmaNovaTela())
				JOptionPane.showMessageDialog(null, "A tela ja esta aberta");
		}
	});
}

public static void main(String[] args)
{
	FrameTeste janela = new FrameTeste();
	janela.setSize(640, 480);
	janela.setVisible(true);
}

}

[/code]
Existem outras formas para resolver isso e até formas mais elegantes.
Agora vai de você estudar e refatorar o código.

Valew

saquei…valeu aí,ajudaram pra caramba :smiley:

o método que cria/deleta o arquivo.txt pra só abrir uma intância do programa eu consegui fazer sozinho usando java.io.File;

Só um alerta, cuidado com isso porque se esquecer de apagar o arquivo em alguma saída do seu programa, o usuário nunca mais vai conseguir abrí-lo, a não ser que ele mesmo apague o arquivo na mão. Por isso, cuidado com exceções inesperadas.

Eu sugiro criar um hook para ele apagar o arquivo automaticamente quando a máquina virtual terminar:

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run () {
        // Apaga o arquivo aqui
    }
});

Pode colocar isso no método main que inicializa a aplicação.
Nesse caso, o arquivo só vai continuar lá se a máquina virtual morrer por falha (ABEND).

Sim enquanto eu tava implementando eu vi o método nomeAquivo.deleteOnExit();

que já faz isso automaticamente

Verdade, tinha esquecido desse daí!
Mais fácil ainda! :wink: