( Resolvido ) - Como finalizar uma thread.?

27 respostas
F

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 …

27 Respostas

paulo1911

Olá amigo, tente:

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

Fallow

ViniGodoy

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.

renamed

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.

F
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");


        


    }
ViniGodoy

Declare sua variável contador como volatile

F

ja declarei e mesmo assim continua.

ViniGodoy

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

F

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;
F

para que serve o volatile ?

ViniGodoy

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ó.

L

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:

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);      	
    }
	 

}
ViniGodoy

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.

F

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 ?

Elizeu_Santos

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

ViniGodoy

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 ?

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

ViniGodoy

???

ViniGodoy

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

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

F

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                   

}
L

ViniGodoy:
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

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

ja resolvi VINI , foi malz aew !!

abrxx

ViniGodoy

Declare Classe2 objeto na linha 27 do código que você me passou:

Classe2 objeto = null;

Transforme a linhas 356 em:

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

E remova a linha 374.

F

pronto! problema resolvido, agora sim a Thread está parando…
muito obrigado cara…

ViniGodoy

felipevs:
pronto! problema resolvido, agora sim a Thread está parando…
muito obrigado cara…

Mas entendeu o problema? Você tinha 2 objetos (iguais), pois criava 2 vezes com o new. Aí vc chamada start() em um, mas zerar no outro.

Só o que fiz foi criar o objeto uma vez só. :wink:

F

é, isso mesmo. eu não sabia que só precisava criar um objeto, pensei que tinha que criar um novo objeto para cada botão.

L

Estou estudando o codigo surgiu o seguinte problema:

no metodo rum da classe desligueSo(linha 90
quero executar um outro metodo “salvar” na classe telaInicialDesligueSo (que inventei só para testar)

desligueSo (linha 90)

if(contador == 0){ telaInicialDesligueSo.salvar(); }

porem quando o contador zera surge o seguinte erro…

Exception in thread “Thread-5” java.lang.NullPointerException
at telas.desligueSo.run(desligueSo.java:xxx)

L

lusilaine:
Estou estudando o codigo surgiu o seguinte problema:

no metodo rum da classe desligueSo(linha 90
quero executar um outro metodo “salvar” na classe telaInicialDesligueSo (que inventei só para testar)

desligueSo (linha 90)

if(contador == 0){ telaInicialDesligueSo.salvar(); }

porem quando o contador zera surge o seguinte erro…

Exception in thread “Thread-5” java.lang.NullPointerException
at telas.desligueSo.run(desligueSo.java:xxx)

Alguem?

ErickRAR

Esse “telaInicialDesligueSo” está instanciado? Se estiver, veja se no método salvar você não está tentando utilizar algum objeto não instanciado.

L

ErickRAR, bom dia

OK solucinado, realmente faltava instanciar

Solução:
Linha 356

objeto = new Classe2(this.campoSaidaHoras,this.campoSaidaMinutos,campoSaidaSegundos, (this));
e inclusão no Método construtor.

public Classe2(JLabel mostrarHoras, JLabel mostrarMinutos, JLabel mostrarSegundos, TelaInicialDesligueSo telaInicialDesligueSo) { this.exibirHoras = mostrarHoras; this.exibirMinutos = mostrarMinutos; this.exibirSegundos = mostrarSegundos; this.telaInicialDesligueSo= telaInicialDesligueSo; }

Criado 23 de fevereiro de 2011
Ultima resposta 15 de ago. de 2012
Respostas 27
Participantes 8