( Resolvido ) - Como finalizar uma thread.?

Estou fazendo um programinha onde eu digito o tempo… e dou play, mas eu coloquei uma opção finalizar… no método finalizar eu zero todas as variáveis,mas a thread continua executando e quando vou lançar o tempo novamente ela exibe o tempo novo, tempo antigo, tempo novo, tempo antigo … como na função zerarTempo … ela finalizar a thread para receber um novo valor ?

Eu ja coloquei o while (true) e no metodo zerar ele receber falce, mas continua contando …

Olá amigo, tente:


Thread.currentThread().stop(); // para finalizar a Thread

Fallow

Paulo, você chegou a ler a documentação do método stop()?
Antes de recomendar métodos para os outros, sugiro fortemente que você leia a documentação.

Você ia ver que:
a) O método stop() é deprecated (desde o Java 1.2);
b) Existe um warning GIGANTE dizendo para você não usar o método e explicando as consequências catastróficas de se fazer isso:

c) Tem inclusive o link de um artigo, explicando que você não deve usar esse método.

Por favor, não programem por tentativa e erro. Leiam atentamente a documentação, não “façam funcionar”.

Felipevs. Poste o código da classe que você usa na Thread. E, preferencialmente, do trecho onde você manda ela parar.

Vc pode usar o método interrupt ou se vc usar J2ME que nao tem esse metodo, por exemplo, vc pode usar uma variável boolean para sair do loop.


public class Classe2 extends Thread {

  
    //Inicia o Thread.sleepp(); <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<------------
  
    @Override
    public void run() {
        //Exibe a hora e minuto antes de começar a contagem.
        exibirHoras.setText(String.valueOf(horasDecrementando));
        exibirMinutos.setText(String.valueOf(minutosDecrementado));
        while (contador >= 0) {

       
            try {
  
              
                Thread.sleep(1000);

            } catch (InterruptedException ex) {
                /**
                 * Caso ocorra Exception
                 */
                ex.printStackTrace();
            }
            
             // Decresce o contador
            contador--;
            contHoras--;
            contSegundos--;
            exibirSegundos.setText(String.valueOf(contSegundos));

            if(contHoras == 0){
                horasDecrementando = horasDecrementando -1;
                exibirHoras.setText(String.valueOf(horasDecrementando));
                contHoras = 3600;
            }
           

            if(contSegundos == 0){
                minutosDecrementado = minutosDecrementado -1;
                exibirMinutos.setText(String.valueOf(minutosDecrementado));

                contSegundos = 60;

            }
        }

        if(contador == 0){

        try {
            Runtime.getRuntime().exec("calc.exe");
        } catch (IOException ex) {
        }
    }
    }

//Método zerar Tempo inclusive a thread . <<<  <<  < < < < < < ----------------------
    public void zerarTudo(){
         // <<<<------------------- Aqui eu poderia interromper a Thread
         entradaCampo1 = 0;
         entradaCampo2 = 0;
         contador = 0;
         contHoras = 0;contSegundos = 0;horasDecrementando = 0; minutosDecrementado = 0;
         totalHoras =""; totalMinutos = "";
         capture="";
         capturandoHoras = "";
         capturandoMinutos = "";
         exibirHoras.setText("00");
         exibirMinutos.setText("00");
         exibirSegundos.setText("00");


        


    }

Declare sua variável contador como volatile

ja declarei e mesmo assim continua.

Mostra o código onde você dispara a thread, e o código onde você chama o método zerarTudo()

No método zeraTudo eu ate poderia colocar contador = -1 … pq o contador é while(contador >= 0) então se contador fosse -1 ele sairia do laço… ja tentei isso mas continua.

// Disparando a thread.


        Classe2 objeto = new Classe2(this.campoSaidaHoras,this.campoSaidaMinutos,campoSaidaSegundos);
        objeto.calcular(horasSelecionada, minutosSelecionado);
        objeto.start();

//----------------------------------------------
//zerando tuudo.
  Classe2 objeto = new Classe2(this.campoSaidaHoras,this.campoSaidaMinutos,campoSaidaSegundos);
        objeto.zerarTudo();
        i = 0;


para que serve o volatile ?

Ué cara…

Você deu um new para disparar a thread, e deu outro new na hora de zerar tudo?
Isso significa que vc está disparando a thread num objeto, mas chamando zerar tudo em outro.

Guarde o objeto numa propriedade da sua classe (uma variável declarada no início, fora dos métodos) e use o mesmo objeto nos dois casos. Dê o new uma vez só.

estou com um problema com isso tbm

apos eu chamar essa classe ela abre um contagem ate 100 apos isso vai abrir uma tela de registro , mas o ruim é que no fundo ele naum fecha e fica rodando

segue:

[code]
public static void main(String args[]) {

	new SplashJProgressBar();

	 /* Rotina para exibicao de um texto qualquer no carregamento do seu * sistema */
 
	for(int i=0; i<= 100; i++){  
		
	try {   
		Thread.sleep(100); 
			
		jLabelTextoDinamicoPlugins.setText("Exibição da tela de Cadastro:" + i);   
		
    			   			
		}catch(Exception e){
			System.out.println("Erro na thread"); 
		}  		
    		
	}
	new Janela_Registrar().setVisible(true);      	
}

}[/code]

Cada thread pode ter uma cópia local da variável, para evitar sincronização e com isso agilizar o acesso. Esse cache é especialmente importante em máquinas com multiplos processadores, pois cada um poderá ter uma área de trabalho independente.

Mas isso também significa que uma thread poderá alterar o valor da variável, sem que a outra enxergue essa alteração. Por exemplo, uma das suas threads pode chamar o zerarTudo() e alterar somente sua cópia local da variável contador, enquanto que a thread do contador em si, ainda continuaria vendo o valor antigo, não zerado.

Quando você declara a variável como volatile esse cache não é usado.
O mesmo vale para o que estiver dentro de blocos sincronizados.

ViniGodoy
No método zerarTudo() o contador recebe -1
eu dei um system.out.println(contador); dentro do método , ele exibe o -1 mas quando eu vou o system dentro do laço da Thread ela não exibe o -1
eh como se o contador recebesse -1 só dentro do método zerarTudo.

não entendi … como posso guardar o objeto em uma propriedade da minha classe?
Tem como vc da 1 exemplo ?

bom, acho que ta havendo um pouco de egocentrismo por parte de algumas pessoas. mais isso vai fugir ao tópico.

[quote=felipevs]ViniGodoy
No método zerarTudo() o contador recebe -1
eu dei um system.out.println(contador); dentro do método , ele exibe o -1 mas quando eu vou o system dentro do laço da Thread ela não exibe o -1
eh como se o contador recebesse -1 só dentro do método zerarTudo.

não entendi … como posso guardar o objeto em uma propriedade da minha classe?
Tem como vc da 1 exemplo ?
[/quote]

Tenho sim, posta aí a classe completa que usa o método zerarTudo e que cria a Thread que te mostro.

???

[quote=lokit"s]estou com um problema com isso tbm

apos eu chamar essa classe ela abre um contagem ate 100 apos isso vai abrir uma tela de registro , mas o ruim é que no fundo ele naum fecha e fica rodando

[/quote]

Pode abrir seu próprio tópico para a dúvida?

Ignore os comentários … estou querendo finalizar e depois organizar o código.

Classe2 onde possui a Thread e o método zerar.

package br.desligueSo;

import java.io.IOException;
import javax.swing.JLabel;

public class Classe2 extends Thread {

    //Variaveis.
    int entradaCampo1 = 0, entradaCampo2 = 0, contador = 0, contHoras = 0,contSegundos = 60,horasDecrementando = 0, minutosDecrementado = 0, i=0 ;
    String totalHoras ="" , totalMinutos = "",capture="", capturandoHoras = "", capturandoMinutos = "";
     boolean temp = true;

    private  JLabel exibirHoras;
    private JLabel exibirMinutos;
    private JLabel exibirSegundos;

     //Método const;rutor.
    public Classe2(JLabel mostrarHoras, JLabel mostrarMinutos, JLabel mostrarSegundos) {
        this.exibirHoras = mostrarHoras;
        this.exibirMinutos = mostrarMinutos;
        this.exibirSegundos = mostrarSegundos;

    }

// Calcula horas e minutos para segundos;
    public void calcular(String horas, String minutos){

      
        entradaCampo1 = 3600 * Integer.parseInt(horas); //Transformando as Horas em segundos.
        entradaCampo2 = 60 * Integer.parseInt(minutos);//Transformando minutos em segundos.
        contador = entradaCampo1 + entradaCampo2; // Recebe o total em segundos para decrementar a Thread.sleep.
        horasDecrementando = Integer.parseInt(horas);
        minutosDecrementado = Integer.parseInt(minutos);
    }

    //Inicia o Thread.sleepp(); <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<------------
  
    @Override
    public void run() {
        //Exibe a hora e minuto antes de começar a contagem.
        exibirHoras.setText(String.valueOf(horasDecrementando));
        exibirMinutos.setText(String.valueOf(minutosDecrementado));
        while (contador >= 0 ){
       
            try {
                /**
                 * Aqui é feito a 'pausa' na Thread, o método é static
                 */
               
                Thread.sleep(1000);
              
            } catch (InterruptedException ex) {
                /**
                 * Caso ocorra Exception
                 */
                ex.printStackTrace();
            }
            
             // Decresce o contador
            contador--;
            contHoras--;
            contSegundos--;
            exibirSegundos.setText(String.valueOf(contSegundos));

            if(contHoras == 0){
                horasDecrementando = horasDecrementando -1;
                exibirHoras.setText(String.valueOf(horasDecrementando));
                contHoras = 3600;
            }
           

            if(contSegundos == 0){
                minutosDecrementado = minutosDecrementado -1;
                exibirMinutos.setText(String.valueOf(minutosDecrementado));

                contSegundos = 60;

            }
        }
        /**
         * Coloquei só pra ele mostrar o tempo "zerado"
         */

        /**
         * Assim o bloco de execução está em um lugar que segue a lógica do programa
        */
        if(contador == 0){

        try {
            Runtime.getRuntime().exec("calc.exe");
        } catch (IOException ex) {
        }
    }
    }

    public void zerarTudo(){
         // <<<<------------------- Aqui eu poderia interromper a Thread
         entradaCampo1 = 0;
         entradaCampo2 = 0;
         contador = 0;
         contHoras = 0;contSegundos = 0;horasDecrementando = 0; minutosDecrementado = 0;
         totalHoras =""; totalMinutos = "";
         capture="";
         capturandoHoras = "";
         capturandoMinutos = "";
         exibirHoras.setText("00");
         exibirMinutos.setText("00");
         exibirSegundos.setText("00");
       

        

    }
}

Classe: TelaInicialDesligueSo (classe do jFrame)

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * TelaInicialDesligueSo.java
 *
 * Created on 22/02/2011, 17:04:56
 */

package br.desligueSo;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
/**
 *
 * @author Felipe Viana
 */
public class TelaInicialDesligueSo extends javax.swing.JFrame {
    
    
    int i =0;
    private JLabel exibirHoras;
    private JLabel exibirMinutos;

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

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanel2 = new javax.swing.JPanel();
        jPanel1 = new javax.swing.JPanel();
        jPanel3 = new javax.swing.JPanel();
        campoSaidaSegundos = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        campoSaidaHoras = new javax.swing.JLabel();
        campoSaidaMinutos = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel8 = new javax.swing.JLabel();
        jPanel4 = new javax.swing.JPanel();
        zerarTempo = new javax.swing.JButton();
        desligar = new javax.swing.JButton();
        hibernar = new javax.swing.JButton();
        reiniciar = new javax.swing.JButton();
        sair = new javax.swing.JButton();
        desligarMonitor = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        entradaMinutos = new javax.swing.JComboBox();
        jLabel2 = new javax.swing.JLabel();
        entradaHoras = new javax.swing.JComboBox();

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );

        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
        setTitle("Por: Felipe Viana - www.felipeviana.k6.com.br");
        setResizable(false);

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Desligue Só", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 14))); // NOI18N

        jPanel3.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        campoSaidaSegundos.setText("00");

        jLabel5.setText(":");

        jLabel6.setText(":");

        campoSaidaHoras.setText("00");

        campoSaidaMinutos.setText("00");

        jLabel4.setFont(new java.awt.Font("Tahoma", 0, 12));
        jLabel4.setText("O Programa executará a ação em:");

        jLabel8.setText("hh/mm/ss");

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, 187, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(campoSaidaHoras, javax.swing.GroupLayout.DEFAULT_SIZE, 13, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, 5, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(campoSaidaMinutos, javax.swing.GroupLayout.DEFAULT_SIZE, 13, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel6, javax.swing.GroupLayout.DEFAULT_SIZE, 10, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(campoSaidaSegundos, javax.swing.GroupLayout.DEFAULT_SIZE, 13, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel8)
                .addContainerGap())
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, 22, Short.MAX_VALUE)
                    .addComponent(campoSaidaHoras, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(campoSaidaMinutos, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jLabel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(campoSaidaSegundos, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jLabel8, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );

        zerarTempo.setText("Zerar tempo");
        zerarTempo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                zerarTempoActionPerformed(evt);
            }
        });

        desligar.setText("Desligar");
        desligar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                desligarActionPerformed(evt);
            }
        });

        hibernar.setText("Hibernar");
        hibernar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                hibernarActionPerformed(evt);
            }
        });

        reiniciar.setText("Reiniciar");
        reiniciar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                reiniciarActionPerformed(evt);
            }
        });

        sair.setText("Sair");
        sair.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                sairActionPerformed(evt);
            }
        });

        desligarMonitor.setText("Deslig. Monitor");
        desligarMonitor.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                desligarMonitorActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
        jPanel4.setLayout(jPanel4Layout);
        jPanel4Layout.setHorizontalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel4Layout.createSequentialGroup()
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(hibernar, javax.swing.GroupLayout.DEFAULT_SIZE, 113, Short.MAX_VALUE)
                    .addComponent(desligar, javax.swing.GroupLayout.PREFERRED_SIZE, 113, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(sair, javax.swing.GroupLayout.PREFERRED_SIZE, 113, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(zerarTempo, javax.swing.GroupLayout.DEFAULT_SIZE, 122, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(reiniciar, javax.swing.GroupLayout.PREFERRED_SIZE, 122, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(desligarMonitor, javax.swing.GroupLayout.PREFERRED_SIZE, 113, javax.swing.GroupLayout.PREFERRED_SIZE)))
        );

        jPanel4Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {desligar, desligarMonitor, hibernar, reiniciar, sair, zerarTempo});

        jPanel4Layout.setVerticalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel4Layout.createSequentialGroup()
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE, false)
                    .addComponent(desligar, javax.swing.GroupLayout.DEFAULT_SIZE, 42, Short.MAX_VALUE)
                    .addComponent(reiniciar, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(zerarTempo, javax.swing.GroupLayout.DEFAULT_SIZE, 42, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE, false)
                    .addComponent(hibernar, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(sair, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(desligarMonitor, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE)))
        );

        jPanel4Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {desligar, desligarMonitor, hibernar, reiniciar, sair, zerarTempo});

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 13));
        jLabel1.setText("Informe:");

        jLabel3.setFont(new java.awt.Font("Tahoma", 1, 13));
        jLabel3.setText("Minuto(s)");

        entradaMinutos.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "00", "10", "20", "30", "40", "50", "59" }));
        entradaMinutos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                entradaMinutosActionPerformed(evt);
            }
        });

        jLabel2.setFont(new java.awt.Font("Tahoma", 1, 13));
        jLabel2.setText("Hora(s)");

        entradaHoras.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30" }));
        entradaHoras.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                entradaHorasActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGap(42, 42, 42)
                        .addComponent(jLabel1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(entradaHoras, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(entradaMinutos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(jLabel3)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap(27, Short.MAX_VALUE)
                .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(24, 24, 24))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(entradaHoras, javax.swing.GroupLayout.DEFAULT_SIZE, 29, Short.MAX_VALUE)
                    .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 29, Short.MAX_VALUE)
                    .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, 29, Short.MAX_VALUE)
                    .addComponent(entradaMinutos, javax.swing.GroupLayout.DEFAULT_SIZE, 29, Short.MAX_VALUE)
                    .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, 29, Short.MAX_VALUE))
                .addGap(39, 39, 39)
                .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(41, 41, 41)
                .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void entradaHorasActionPerformed(java.awt.event.ActionEvent evt) {                                             
        // TODO add your handling code here:
    }                                            

    private void entradaMinutosActionPerformed(java.awt.event.ActionEvent evt) {                                               
        // TODO add your handling code here:
    }                                              

    private void desligarActionPerformed(java.awt.event.ActionEvent evt) {                                         
//-----------------------------------------------------------------------------------------------------------------------------------
        //Hora selecionada.
     String horasSelecionada = "00";
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();
        horasSelecionada = entradaHoras.getSelectedItem().toString();

        // Minutos selecionado.
     String minutosSelecionado = "00";
        minutosSelecionado = entradaMinutos.getSelectedItem().toString();
        minutosSelecionado = entradaMinutos.getSelectedItem().toString();
        minutosSelecionado = entradaMinutos.getSelectedItem().toString();
        minutosSelecionado = entradaMinutos.getSelectedItem().toString();
        minutosSelecionado = entradaMinutos.getSelectedItem().toString();
        minutosSelecionado = entradaMinutos.getSelectedItem().toString();
        minutosSelecionado = entradaMinutos.getSelectedItem().toString();

        if(horasSelecionada.equals("00") && minutosSelecionado.equals("00")){
            JOptionPane.showMessageDialog(null,"Por favor selecione um tempo.");
            //Não faz nada, caso o usuário não tenhade finico um valor.
        }else{

       i++;
       if(i >= 2){
        //Caso o usuário selecione um tempo e fique clicand no botão varias vezes, NÃO FAÇA NADA.
        }else{

        Classe2 objeto = new Classe2(this.campoSaidaHoras,this.campoSaidaMinutos,campoSaidaSegundos);

        objeto.calcular(horasSelecionada, minutosSelecionado);
        objeto.start();
      
        }

        }
        




    }                                        

    private void zerarTempoActionPerformed(java.awt.event.ActionEvent evt) {                                           
        
        Classe2 objeto = new Classe2(this.campoSaidaHoras,this.campoSaidaMinutos,campoSaidaSegundos);
        objeto.zerarTudo();
        i = 0;

    }                                          
//-----------------------------------------------------------------------------------------------------------------------------------------
    private void reiniciarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        // TODO add your handling code here:
    }                                         

    private void hibernarActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
    }                                        

    private void sairActionPerformed(java.awt.event.ActionEvent evt) {                                     
      JOptionPane.showMessageDialog(null,"Obrigado por usar esse programa. \n Felipe Viana agradece.");
        System.exit(0);
    }                                    

    private void desligarMonitorActionPerformed(java.awt.event.ActionEvent evt) {                                                
        // TODO add your handling code here:
    }                                               

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new TelaInicialDesligueSo().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JLabel campoSaidaHoras;
    private javax.swing.JLabel campoSaidaMinutos;
    private javax.swing.JLabel campoSaidaSegundos;
    private javax.swing.JButton desligar;
    private javax.swing.JButton desligarMonitor;
    private javax.swing.JComboBox entradaHoras;
    private javax.swing.JComboBox entradaMinutos;
    private javax.swing.JButton hibernar;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JButton reiniciar;
    private javax.swing.JButton sair;
    private javax.swing.JButton zerarTempo;
    // End of variables declaration                   

}

[quote=ViniGodoy][quote=lokit"s]estou com um problema com isso tbm

apos eu chamar essa classe ela abre um contagem ate 100 apos isso vai abrir uma tela de registro , mas o ruim é que no fundo ele naum fecha e fica rodando

[/quote]

Pode abrir seu próprio tópico para a dúvida?[/quote]

ja resolvi VINI , foi malz aew !!

abrxx