[RESOLVIDO] Mensagem com timer, para desligamento do programa

Assim,
preciso fazer um case de desligamento do sistema…(programa servidor)
o servidor informa todos os clientes conectados que o sistema sera desligado tal hora…

dai… quando faltar uns 5 minutos para o tempo chegar…
quero disparar um alerta…
“O sistema será desligado em 00:05:00 \nSalve o que estiver fazendo.”

e dai fica ali… sem poder fechar a mensagem… com o tempo rolando…

alguem pode dar uma luz de como ficará o codigo ?

cara, se eu fosse usuário deste sistema ficaria puto, mas te ajudando, se você estiver utilizando uma camada física adicional você poderia utilizar o TimeService, caso contrário o Quartz irá te ajudar melhor neste caso

fala fael
me ajudando denovo :slight_smile:

Bah, ficaria puto
srsarhsairsa

mas é que assim.
o sistema tem que ser desligado em alguns momentos…
por ex para atualizações…

entao tenho que parar o servidor…
atualizar e restartar…
n posso so derrubar os usuarios … dai vo enviar uma mensagem avisando…

dei uma lida no timerSession que vc passou…
isso ja atende uma parte do que eu preciso…

cabei de olhar … mais tarde vo implementar…
vo dar mais uma olhada pra ver como funciona a parte do tempo rolando…

pode mandar uma dica de qual OptionPane usar ?
tipo… um InformMessage…

mas n quero q ele de ok… nem possa fazer nada com a mensagem…

ou fecha o sistema… ou fica olhando pra mensagem…
com o tempo decrescendo ate o sistema se fechar…

tem essa parte do tempo decrescendo tbm…
q n sei direito o que fazer…
vo criar um MessageTimer ? ^^ um option com um label q vai se atualizando ?

vlw

paralizar o sistema enquanto o usuário está usando não é nada bom, apenas para casos de problemas emergenciais de infra-estrutura, e mesmo assim, ainda para estes casos, devem ser planejados com antecedência e agendados em horários onde quase não há uso, falando a verdade para o usuário, por exemplo ::

o usuário não tem nada a ver com isso. já pensou você acessando seu e-mail e uma contagem destas de repente iniciar paralisando tudo, sem ao menos poder salvar e tal.

eu acho que no seu caso você poderia utilizar o java web start, pois antes de iniciar a aplicação, ele já checa para você de novas atualizações, garantindo que o cliente está executando a versão mais atual do seu projeto

lembre-se uma atualização emergencial não-preventiva é uma atualização não planejada

mais sobre java web start
http://delicious.com/popular/webstart

realmente eu intendo isso …
mas ha casos…
que por alguma falha … geralmente nos testes…

ten-se que corrigir com urgencia um bug do sistema…
e eu tenho que atualizar.

restartar o servidor…
e nessa o cliente eh desconectado…

ai quero avisar primeiro o usuario…

tal hora o sistema vai cair…

ou entao…
daki tantos minutos…

posso lançar um aviso dizendo que o sistema vai ser atualizado as 10 da manha…
e se alguem tiver conectado…
quando for 5 pras 10…
quero lançar essa mensagem…
"faltam 5 minutos para atualização do sistema… salve e feche o que esta fzdo…"
e quero que a tela fike ali…
com o tempo correndo…
o usuario vai salvando o que tem pra fazer…
mas a mensagem ta ali…
com o tempo correndo.

obrigado pelas dicas :stuck_out_tongue:

Resolvido.

Para criar um painel de mensagem sem os Minimizar, Maximizar, Fechar.

usei um JDialog

Colokei ele bem no canto…
com uma mensagem… TextArea.
e um JLabel + JTextField mais abaixo…
o textField é o tempo decrescendo…

        Timer t = null;
        actionTimer aTimer = new actionTimer(miliseg, tfTime, principal);
        t= new Timer(1000, aTimer);
        aTimer.setTimer(t);
        t.start();

Usei a classe Timer da “javax.swing” para ficar decrementando o tempo de 1 em 1 segundo.

  /**
     * Action Listener que atualiza o tempo que falta pra desligar.
     */
    private class actionTimer implements ActionListener {

    	/** TextField que contem o tempo*/
    	private JTextField tfTimer;
    	/** tempo faltante em milisegundos */
    	private long time;
    	/** usado para rodar o relogio regressivo*/
    	private Calendar date;
    	
    	private Timer timer;
    	private FramePrincipal f;
    	
    	public actionTimer(long time, JTextField tf, FramePrincipal f) {
	    	this.time = time;
	    	this.tfTimer = tf;
	    	date = Calendar.getInstance();
	    	this.f = f;
    	}
    	
    	public void setTimer(Timer t) {
    		this.timer = t;
    	}
    	
    	/** Diminui o contador até chegar em 0.
    	 *  O contador representa o tempo faltante para desligamento do sistema.
    	 */
		public void actionPerformed(ActionEvent e) {
			time -= 1000;
			date.set(Calendar.HOUR, 0);
			date.set(Calendar.MINUTE, 0);
			date.set(Calendar.SECOND, 0);
			date.setTimeInMillis(date.getTimeInMillis() + time);
			
			DateFormat df = SimpleDateFormat.getTimeInstance();
			tfTimer.setText(df.format(date.getTime()));
			if(time <= 0) {
				timer.stop();
				MessagesDialog.warningMessage("Saindo do sistema \n\nRazao:\n" +msg);
				f.actionSair();
			}
		}
    	
    }

Vlw ae.
e para quem pecisar um dia ta ai o codigo.