Despertador em java

segue uma versão que funciona bem praticamente, pois não mostro a hora, com o paint e o repaint que ocupava toda a memória…

um download, o que achou[url]?

Ótima idéia a sua…
Mas diga ai, o que você usou para despertar exatamente na hora que foi configurado?
Threads? Algum registro no SO?

fiz uma variavel para a hora atual e para a hora do despertador. então eu comparo com if, se a hora for igual a hora do despertador ele toca, mas só tocava uma vez, então eu faço com que a hora do despertador, avance um pouco a todo momento, então ela sempre fica sendo a hora atual, apartir que despertou, até o parar…

a hora do despertador e a hora atual, são convertidas como string mesmo. para comparação, não achei forma de comparar datas, dentro if, talvez, e assim logo funcionou.

é preciso para mostrar hora um repaint, da string, g.draw string, pois senão, a hora ficaria parada.

enfim, tem coisas interessantes.

eis o código chave da coisa:


            if (horaCalculo.equals(horaCalculoDespertador)) {
               //chama o método para tocar o som se a hora for igual a hora de despertar.
               tocaGeral();                  
               //aqui estou adiantando a hora para coincidir com a hora atual
               //e continuar a tocar o som, fica infinitamente até parar no botão.
               date = new Date(date.getTime() + 1 * 60 * 20);
               horaCalculoDespertador = "" + formatter2.format(date);
               System.out.println("date="+date);                  
            } repaint();
        }[/code]


também para calcular o tempo... faço isso através da chamada do botão ok, como actionlistener...


desta forma:


[code]
if (compara.equals("2 minutos")) {
                date = new Date();
                date = new Date(date.getTime() + 2 * 60 * 1000); //estipula o tempo      
                despertarHora.setText("" + formatter2.format(date));
            }
            
            if (compara.equals("3 minutos")) {
                date = new Date();
                date = new Date(date.getTime() + 3 * 60 * 1000); //estipula o tempo      
                despertarHora.setText("" + formatter2.format(date));
            }
[/code]

ele pega a hora e soma a quantidade de tempo a ser acrescentada. depois é só calcular como falei com o equals acima... bem simples.


o chato é o bip estar no c ainda.


mas não vi forma ainda de achar dentro do próprio projeto, ja fiz isto com imagem, mas agora não deu tão facilmente... deixei assim para a primeira versão pelo menos, caso continue depois, já está funcionando agora.
//arquivos para som
private Clip clip;
private int contador_sons = 0;
private String[] colecao_sons = {"beepdespert", "beepe2"};
  //private static final String LOCAL_SONS = ("/despertador_java/");  

private static final String LOCAL_SONS = “c:/”;
String[] opcoes = {“1 minuto”,“2 minutos”,“3 minutos”,“5 minutos”, “10 minutos”, “15 minutos”, “20 minutos”, “25 minutos”, “30 minutos”, “45 minutos”, “50 minutos”, “55 minutos”, “60 minutos”};
JComboBox combo = new JComboBox(opcoes);
JButton ok = new JButton(“ok”);
JButton parar = new JButton(“parar”);[code]

enfim tb achei interessante, estou aberto a comentários e discussões.

estão baixando o despertador, sem o som. ai não vai funcionar. e o som tem que estar no diretorio c:// por enquanto.

Se quiser algo mais complexo, como despertar tal dia em dada hora, use Quartz. :slight_smile:

Tanto faz ser o c:// linux ou windows?

E minha duvida é como vc fez para murda as bordas e o botão de fechar… :smiley:

e pra trabalhar com as datas e horas experimente o joda.time

bem eu chamo o frame, no construtor de mesmo nome da classe, e chamo o construtor no método main.
eis como crio o frame, com as bordas diferentes… existem vários tipos de decoração.


 public Despertador_java() {

        setTitle("-#-#-#-#-#  Despertador JAVA  -#-#-#-#-#");
        setBounds(200, 150, 400, 300);
        setUndecorated(true);
        getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);

o .FRAME é o ponto da coisa…

 getRootPane().setWindowDecorationStyle(JRootPane.INFORMATION_DIALOG);

outra forma, até adotei, aparece apenas o fechar. é melhor pois não preciso maximizar e minimizar meu despertador.

  getRootPane().setWindowDecorationStyle(JRootPane.ERROR_DIALOG);

FICOU VERMELHO.

  getRootPane().setWindowDecorationStyle(JRootPane.COLOR_CHOOSER_DIALOG);

FICOU VERDE

    getRootPane().setWindowDecorationStyle(JRootPane.FILE_CHOOSER_DIALOG);

TAMBÉM VERDE.

  getRootPane().setWindowDecorationStyle(JRootPane.WARNING_DIALOG);



OU

  getRootPane().setWindowDecorationStyle(JRootPane.QUESTION_DIALOG);


OU


  getRootPane().setWindowDecorationStyle(JRootPane.NONE)

fica sem borda e nem botão...

Bem não havia experimentado todos, mudaram as cores, não sei se algo mais aconteceria no comportamento da janela

também não sei se vc conhece este comando aqui:

 setDefaultCloseOperation(EXIT_ON_CLOSE);

ele pode ser HIDE_ON_CLOSE - padrão.

DO_NOTHING_ON_CLOSE -desativa o botão de fechamento

DISPOSE_ON_CLOSE - faz desaparecer a janela.

e o EXIT_ON_CLOSE já visto. - que encerra o aplicativo.

O createlineborder ou setborder, também é interessante… dei uma cara nova ao aplicativo, com estas pesquisas.

 setTitle("-#-#-#-#-#  Despertador JAVA  -#-#-#-#-#");
        setBounds(200, 150, 400, 260);
        setUndecorated(true);
       getRootPane().setWindowDecorationStyle(JRootPane.WARNING_DIALOG);
       getRootPane().setBorder(BorderFactory.createLineBorder(Color.black,10) );
        
//  getRootPane().setWindowDecorationStyle(JRootPane.NONE);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);

serviu para algo. se precisar mais, avisa.

sobre o linux, tenho o ubuntu, mas nao testei nada nele.

a idéia era o programa servir para um despertador imediato, como disse quando deixamos um feijão no fogo ou coisa parecida.

ele vai até 60 minutos, outra implementação seria aumentar esta possibilidade, que ficou para a 2 versão, se existir. o usuário escreve o tempo que quer que demore a despertar em horas e minutos provavelmente, que vai gerar uma variavel número que vai ser multiplicada.

seria o JAVA COOK, na minha idéia original o nome do aplicativo.

por isso para despertar em outros dias, não estava no programa. E acredito que desligaríamos o computador antes, talvez, não seria muito interessante, mas é possível fazer:

se o dia for tal e a hora for tal, desperta, senão, não.

este é o algoritmo , mini algoritmo.

alguma idéia clara para tirar o beep do c. ainda não pesquisei sobre isso, já fiz com imagens no imageicon, deve ser igual… mas não funcionou de primeira.

olha a cara do novo java cook.

:Segue:

o som está lá em cima… agora não minimiza mais, pois de fato não precisa e pus uma borda, preta.
que tal?

to achando muito colorido.

mas quero mudar o icone no jar, tem um tópico sobre isto…

http://www.guj.com.br/java/262264-mudar-icone-do-jar

SEGUE VERSÃO ATUALIZADA (O ÚLTIMO OU SEGUNDO) , COM A AJUDA APARECENDO… SOM EMBUTIDO, ETC.

OK vlw!!!

Mais, pq não quer que o programa minimize?

bem talvez no final eu poste o código todo aqui. por enquanto aguardo os comentários.

hum, é mesmo, minimizar é importante, vou realterar. de fato só não precisa maximizar e acho que tem sim, como fazer isto. ok.

Ei amigo, para conferir a hora, dia, etc não seria interessante um thread concorrendo o processador, verificando a hora a cada instante de sua timeslice?
você poderia até tirar a parte da tela, deixando apenas o thread ativo, que se inicia-se com as configurações pré-destinadas diariamente :slight_smile:

seguindo isso, eu vou tentar um também, se é que você não fica bravo por copiar sua idéia :wink:

nao nao fico brabo nao. faz e posta aí.

primeiramente pensei em thread, inclusive fiz um .sleep. mas a coisa ficou lenta e o cooler ficou a todo vapor, então vi que algo estava errado, muitos calculos desnecessários sendo feitos. e por fim resolvi com o repaint, do metodo paint…

neste tópico postei a forma que fiz o relógio funcionar, lá no final
http://www.guj.com.br/java/261982-campo-data-e-hora-#1370931

acho que falei que transformo a hora em string e comparo a todo momento

mas nao entendi bem o que quis dizer, tirar parte da tela, como assim? e o que vc diz ser a timeslice, fatia da hora, o mostrador do relógio?
sobre o dia, acho que falei, a idéia, não era ultrapassar mais de um dia. se vc ve um despertador de ponteiros mesmo, vc não pode programar mais do que 12 horas, pois se estiver ligado, tocará.

a idéia, era para o feijão no fogo mesmo, tanto que a princípio vai até 60 minutos apenas, mas posso fazer aumentar como opção.

reply

Olá raghy

Bem legal o seu despertador :smiley: já estou usando ele aqui em casa :thumbup:

o único problema é que toda vez que ele toca penso que alguém esta infartando :lol: (por favor, mude o som beepdespert para algo com “TRIM TRIM TRIM”)

Caso ainda esteja com dúvida,

eu utilizo arquivos de som em projetos Java desta meneira:

import java.applet.AudioClip;  
import javax.swing.JApplet;  
  
public class Sons extends JApplet {  
  
    private AudioClip somJogo;  
  
    public Sons() {  
        this.somJogo = newAudioClip(getClass().getResource("/resources/musica.MID"));  
    }  
  
    public void tocarSom() {  
        this.somJogo.loop();  
    }  
  
    public void pararSom() {  
        this.somJogo.stop();  
    }  
} 

Testa ai, é só instanciar a classe Sons e chamar o seu método tocarSom(); e/ou pararSom();

Isto pode ajudar :arrow: http://www.jroller.com/adrianromero/entry/jugando_con_java_2d

E o código fonte?
Gostei, vai ser bem útil aqui em casa para min(queimo a comida a vezes).

é a idéia é não queimar comida e não pegar fogo na casa, quando se faz aquele feijãozinho de 20 ou 30 minutos…

o som pode ser mudado, colocando qualquer outro com o mesmo nome… mas ainda penso em fazer opções de som para a segunda versão, assim , como aumentar o tempo se necessário, mas não é a idéia, quando se fala em comida, geralmente 1 hora dá.

outro nome é o JAVA COOK

só fazer um bom layout e ficará um software famoso…

aliás a programação do toque também pode ser revista, pois a hora sempre se iguala, isso faz com que possa ter comportamento diferente em algum momento o que não é legal. preciso calcular um pouquinho melhor ainda isto…