Trabalhando com a Thread principal

Pessoal, bom dia!

Tenho um método que faz a leitura de um arquivo texto e popula um objeto.
E no meio da leitura eu faço uma verificação, se for true eu chamo um JFrame.

Até ai tudo bem…

Eu consigo chamr o JFrame e parar a execução da Thread principal usando o wait();…
e quero continuar a execução do meu método depois que o usuario clicar no Jbutton desse frame…

depois de dar o setVisible(true) no jframe eu usei um try e dei um wait();

Como faço pra continuar a execução do método de leitura depois que o usuario clicar no meu jbutton?
Qual ação coloco no meu Jbutton…por favor se alguem souber, me ajude…

Obrigado

Oi,

Sem estourar uma exceção, o que faz uma Thread ser liberada do wait()? R: Notify!

synchronized (SuaThread) { SuaThread.notify(); }

Tchauzin!

Oi Lina!

btnOk.addActionListener(new ActionListener() {

		@Override
		public void actionPerformed(ActionEvent arg0) {
			synchronized (Thread.currentThread()) {
				Thread.currentThread().notify();
			}
		}
	});

Foi correto o que fiz? não consegui continuar a execução do método…

Eu preciso criar uma thread pra executar o metodo e outra pra abrir o frame?

Eu gostaria de solucionar esse problema sem inserir threads no meu codigo…trabalhar com a thread principal…(Thread.currentThread())…

para-la quando abrir o frame e esperar o usuario preencher os campos do JFrame e quando ele clicar no botao quero a execução de leitura do metodo continue…

Existe outra maneira de resolver meu problema?

Obrigadoo !

Um jeito mais simples de se fazer isso é usar um JOptionPane, pois ele já faz a pausa da thread automaticamente. Se você precisa de um diálogo personalizado, você pode criá-lo também:

http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html

Consegui pessoal !!!

Obrigado…criei um atributo boolean e quando abro o frame eu inicio ele como false…

liberarThread = false;

e dpois do setVisible do construtor do JFrame eu coloco o codigo

setVisible(true);

	while(!liberarThread){
		//Vai nanar 5s
		try {
			Thread.currentThread().sleep(5);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

dentro do JButton do frame eu mudo para true o valor do atributo liberarThread…

ai ele continua a execução…

É uma gambiarra…mas atendeu o que eu queria…

Obrigado

[quote=Hallan_jr]Consegui pessoal !!!

Obrigado…criei um atributo boolean e quando abro o frame eu inicio ele como false…

liberarThread = false;

e dpois do setVisible do construtor do JFrame eu coloco o codigo

setVisible(true);

	while(!liberarThread){
		//Vai nanar 5s
		try {
			Thread.currentThread().sleep(5);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

dentro do JButton do frame eu mudo para true o valor do atributo liberarThread…

ai ele continua a execução…

É uma gambiarra…mas atendeu o que eu queria…

Obrigado
[/quote]

Põe gambiarra nisso … na boa mesmo, vale muito a pena gastar um tempinho e ler sobre threads e Swing e fazer um trabalho mais limpo:

http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html

Pode crer…Vou ler!! vlww

Oi,

Então. Você usou Thread.currentThread()… e nem sempre a current é a sua Thread.

O que pode ser feito é passar a outra classe a instancia de sua Thread por parâmetro, aí sim o notify irá funcionar. Ou então sincronizar um Objeto comum a ambas as classes.

Tchauzin!