o metodo run(), que comeca a executar o metronomo. Ele possui dois comandos: o primeiro, que converte BPM para o intervalo de tempo que o timer ira usar, e o segundo, que configura o timer para executar a cada intervalo de tempo o beep(presente na classe 'beep').Sobre o timer: e um recurso presente na maioria das linguagens de programacao (talvez todas, nao tenho ciencia) que funciona executando uma determinada tarefa a cada periodo de tempo. Por isso, se enquadra perfeitamente em nosso projeto. O timer nesse caso so para com o metodo encerrar() A classe 'beep' esta contida dentro da classe 'metronomo'. Ela extende da classe TimerTask (algo como tarefa do timer), isso quer dizer que ela e um TimerTask com algo a mais: o nosso codigo. Ha uma sobreescrita* do metodo run(). *Sobreescrita e uma substituicao do metodo original por um novo. Nesse caso, o metodo run() que provavelmente nao faria nada, agora ira gerar nossos beeps.Dentro do metodo run() temos varios comandos: O primeiro e uma condicao que se o tempo atual for 0, ele nao executa mais nada e soma um tempo. Isso acontecera apenas na primeira passagem do metodo beep.O segundo e outra condicao que se o tempo atual for 1, ele exeuta o beep forte, senao, o fraco.O terceiro e outra condicao que se o tempo for igual a quantidade informada pelo usuario, e zerado a quantidade atual de tempos.O quarto comando adiciona um tempo.Vale lembrar que o timer criado funciona como um loop: e executado varias vezes e so para quando alcancar uma determinada condicao. Nesse caso, so ira parar quando for executado o metodo encerrar().Por fim, os metodos BeepForte() e BeepFraco() executam o arquivo de som correspondente. Infelizmente nao consegui rodar o arquivo dentro do pacote .jar, quando for executar e necessario que os dois arquivos de som estejem fora do arquivo .jar. Caso voce saiba chamar um arquivo dentro do pacote .jar por favor comente.Voltando para o nosso formulario, vamos programar o botao Iniciar. No NetBeans basta clicar duas vezes no botao e ele prepara automaticamente o metodo. Inicio da classe frmMetronomo:public class frmMetronomo extends javax.swing.JFrame { metronomo metro; int rodando = 0;// ........Botao Iniciar:private void btnIniciarActionPerformed(java.awt.event.ActionEvent evt) { //'declarando' variaveis e lendo-as int bpm; int nota; int tempos; //se o radio button estiver selecionado para selecionar if (rdbSelecionar.isSelected()) { bpm = slideVelo.getValue(); } //se estiver selecionado para especificar else { bpm = Integer.parseInt(txtVelocidade.getText()); } //lendo os tempos e a nota tempos = Integer.parseInt( (String) cboTempos.getSelectedItem()); nota = Integer.parseInt( (String) cboNota.getSelectedItem()); if (rodando == 1) { metro.encerrar(); } metro = new metronomo(bpm, tempos,nota); metro.run(); rodando = 1; } A classe do formulario possui muito codigo gerado automaticamente pelo NetBeans. Logo apos a declaracao da classe, criei o objeto metro da classe metronomo (se fosse criado no metodo do botao iniciar, poderiam rodar varios metronomos ao mesmo tempo e tambem seria impossivel para-los, o que nao e desejado).No metodo do botao iniciar declaramos as variaveis que iremos enviar para a nossa classe 'metronomo'. A condicao que vem logo apos verifica qual modo de insercao do