[RESOLVIDO]Pausar loops e restartalos novamente

4 respostas
Ar0n

Bem na verdade o que ta acontecendo é o seguinte me surgiu a dúvida do que aconteceria se eu quisese abrir outra janela na minha aplicação ai fui fazer o teste e fiquei com problema em uma parte do loop vou postar abaixo as duas clases que usei.

import java.util.Scanner;

import javax.swing.JOptionPane;

public class JanelaPrincipal {

	static Scanner scanner = new Scanner(System.in);	
	
	public static void main (String [] args){
			
		boolean quest = false;
		String entrada = "";
		while (quest == false) {
			if (JanelaImpar.fechada == true){
				entrada = JOptionPane.showInputDialog(null, "Informe um número par sair e impar para abrir outra janela", "Janela Inicial", -1);				
			}
			if((Integer.parseInt(entrada)%2) == 0){
				quest = true;				
			}else if ((Integer.parseInt(entrada)%2) != 0){				
				while (JanelaImpar.fechada == false){
					scanner.nextLine();					
				} 
				new JanelaImpar();				
			}		
		}
		
	}
}

Classe com a outra janela

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class JanelaImpar extends JFrame implements ActionListener{

	//atributos
	static boolean fechada = true;
	//contrutor da janela
	public JanelaImpar(){
		fechada = false;
		//caracteriasticas da janela
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
		setTitle("Janela Ímpar");
		setSize(300, 500);
		
		JButton botao = new JButton("Fechar");		
		Container container = getContentPane();
		botao.addActionListener(this);
		container.add(botao);		
	}

	public void actionPerformed(ActionEvent e) {
		System.out.println("clicou");
		fechada = true;
		this.dispose();		
	}	
}

Na linha 21 da primeira classe eu consegui pausar a execução, o problema eh fazer ela voltar a acontecer, por isso estou perguntando a respeito de como pausar loops e startalos novamente, tentei pausar o loop usando breal, mas não deu certo, por isso usei o scanner.nextLine, só que agora não consigo faze-lo continuar.

4 Respostas

romarcio

Pausar o loop você não pode fazer. Agora, você pode tentar usar thread com wait(), dai você poderia através da thread bloquear a execução do loop até que a thread o libere.

Ziru

Isso só da com thread mesmo.
Mas muito cuidado quando for programar em modo concurrent, pois se não sincronizar as threads direito seus dados serão corrompidos.
E uma, o erro pode acontecer uma vez e 100 não por causa das threads acredite não tem coisa pior do que tentar arranjar um BUG que você não consegue reproduzir.

ViniGodoy

Você quer que o Swing espere a janela fechar para seu programa continuar?

Então use um JDialog modal:

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.JButton;
import javax.swing.JDialog;

public class JanelaImpar extends JDialog implements ActionListener{
    //contrutor da janela
    public JanelaImpar(){                
        //caracteriasticas da janela
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        setTitle("Janela Ímpar");
        setSize(300, 500);
        setLocationRelativeTo(null);
        setModal(true);
		
        JButton botao = new JButton("Fechar");		
        botao.addActionListener(this);
        add(botao);		
    }

    public void actionPerformed(ActionEvent e) {
        System.out.println("clicou");
        this.dispose();		
    }	
}

Agora você pode fazer o main assim:

import java.util.Scanner;

import javax.swing.JOptionPane;

public class JanelaPrincipal {
    Scanner scanner = new Scanner(System.in);

    public static void main (String [] args){
        boolean quest = false;
        while (true) {
            int valor = Integer.parseInt(JOptionPane.showInputDialog(null, "Informe um número par sair e impar para abrir outra janela", "Janela Inicial", -1));
            if(valor % 2 == 0){
                break;
            }
            new JanelaImpar().setVisible(true);
        }		
    }
}

PS: Nâo abuse de variáveis static. Elas não devem ser usadas da forma que você está usando.

Ar0n

Realmente usando thread da para fazer e fica bem mais profissional, obrigado a resposta de todos :thumbup:

Criado 16 de dezembro de 2012
Ultima resposta 25 de dez. de 2012
Respostas 4
Participantes 4