Relogio Dinamico

O relogio aparece estatico eu preciso que ele apareça dinamico, ou seja, mudando os segundos. Alguém pode dar uma ajuda? OBS: Estou iniciando agora o estudo Java.

package com.Sugestoes;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class Sugestoes {

	public static void main(String[] args) {
		
		Date d = new Date();
		Calendar c1 = Calendar.getInstance();
		int hora = c1.get(Calendar.HOUR_OF_DAY);
		
		
		
		SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm:ss");
		SimpleDateFormat sdf3 = new SimpleDateFormat("dd/MM/yyyy EEEEE");
		
		
		
		System.out.println(sdf3.format(d));
		System.out.println(sdf2.format(d));
		
	
		//aqui.
		
		Calendar c = new GregorianCalendar();
		c.setTime(d);
		String nome = "";
	
		int dia = c.get(Calendar.DAY_OF_WEEK);
		switch(dia){
		  case Calendar.SUNDAY: nome = "Carboidrato;
		  case Calendar.MONDAY: nome = "Áspartico;
		  case Calendar.TUESDAY: nome = "Prolina;
		  case Calendar.WEDNESDAY: nome = "Glutamina";break;
		  case Calendar.THURSDAY: nome = "Lisina";break;
		  case Calendar.FRIDAY: nome = "Fenilalanina";break;
		  case Calendar.SATURDAY: nome = "Histidina";break;

}
System.out.println("Opção da Semana: " + nome);

	if(hora == 0)
	{
		System.out.println("Opção da Hora: A");

}
	else
	
		if(hora == 1) {
		System.out.println("Opção da Hora: B");
		
		}	else	
if(hora == 2) {
			System.out.println("Opção da Hora: C");
}
else
	if(hora == 3) {
			System.out.println("Opção da Hora: D");
		}
	else	
if(hora == 4) {
	System.out.println("Opção da Hora: E");
}
else
	if(hora == 5) {
	System.out.println("Opção da Hora: F");

	}else
		
	if(hora == 6) {
		System.out.println("Opção da Hora: A");
}
	else
	
		if(hora == 7) {
		System.out.println("Opção da Hora: H");
	}
	
		else
if(hora == 8) {
	System.out.println("Opção da Hora: KM");
}
else
	
	if(hora == 9) {
	System.out.println("Opção da Hora: AB");

	}else	
		
	if(hora == 10) {
		System.out.println("Opção da Hora: ACD");
}
	else
		
	if(hora == 11) {
		System.out.println("Opção da Hora: A");
	}else
	
if(hora == 12) {
	System.out.println("Opção da Hora: ATY");
}
else
	if(hora == 13) {
	System.out.println("Opção da Hora: L");
	}
	else
		
if(hora == 14) {
		System.out.println("Opção da Hora: S");
}
else
	if(hora == 15) {
		System.out.println("Opção da Hora: P");
	}
	
	else	
if(hora == 16 && hora <= 17) {
	System.out.println("Opção da Hora: L");
}
	else
	if(hora == 17) {
		System.out.println("Opção da Hora: UI");
}
	else
		
	if(hora == 18) {
		System.out.println("Opção da Hora: LRT");
	}
	else
if(hora == 19) {
	System.out.println("Opção da Hora: LX");
}
else
	if(hora == 20) {
	System.out.println("Opção da Hora: L");
	}
	else
	
		if(hora == 21) {
		System.out.println("Opção da Hora: OI");
}
		else
	if(hora == 22) {
		System.out.println("Opção da Hora: L");
	}
	
if(hora == 23) {
	System.out.println("Opção da Hora: LNY");

	}
	
	}}

eu nao entendi nada, qual a sua interface? gráfica/swing? web? terminal?

se for terminal ANSI tem uns comandos para simular o q vc quer, ao invés de escrever um segundo por linha (ACHO)

Olá, peczenyj!

Bom, estou tentando fazer um app em Java onde de acordo com o dia da semana e a hora apareça para o usuário uma sugestão de alimentação balanceada com aminoácidos…
Só que o relógio aparece estático e eu gostaria que ele fosse dinâmico. Da forma como aparece o usuário precisa sair e entrar no app para atualizar a hora. Estou adentrando no mundo Java agora e por isso sei que não me expresso muito bem em relação as termos técnicos. De qualquer forma, muito obrigada por sua atenção.

Faça um loop para ele repetir constantemente as operações.

Exemplo:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class Sugestoes {

    public static void main(String[] args) {
        try {
            Sugestoes programa = new Sugestoes();
            programa.executar();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    public void executar() {
        Calendar calendario = new GregorianCalendar();
        SimpleDateFormat formatoData = new SimpleDateFormat("dd/MM/yyyy EEEEE");
        SimpleDateFormat formatoHora = new SimpleDateFormat("HH:mm:ss");

        while (true) {
            Date data = new Date();
            calendario.setTime(data);
            System.out.println(formatoData.format(data));
            System.out.println(formatoHora.format(data));

            String opcaoSemana = getOpcaoSemana(calendario);
            System.out.println("Opção da Semana: " + opcaoSemana);

            String opcaoHora = getOpcaoHora(calendario);
            System.out.println("Opção da Hora: " + opcaoHora);

            aguardar(1);
        }

    }

    private String getOpcaoHora(Calendar c) {
        String[] opcoes = new String[] {
                "A",   //  0h
                "B",   //  1h
                "C",   //  2h
                "D",   //  3h
                "E",   //  4h
                "F",   //  5h
                "A",   //  6h
                "H",   //  7h
                "KM",  //  8h
                "AB",  //  9h
                "ACD", // 10h
                "A",   // 11h
                "ATY", // 12h
                "L",   // 13h
                "S",   // 14h
                "P",   // 15h
                "L",   // 16h
                "UI",  // 17h
                "LRT", // 18h
                "LX",  // 19h
                "L",   // 20h
                "OI",  // 21h
                "L",   // 22h
                "LNY"  // 23h
        };
        int hora = c.get(Calendar.HOUR_OF_DAY);
        return opcoes[hora];
    }

    private String getOpcaoSemana(Calendar c) {
        int dia = c.get(Calendar.DAY_OF_WEEK);
        switch (dia) {
            case Calendar.SUNDAY:
                return "Carboidrato";
            case Calendar.MONDAY:
                return "Áspartico";
            case Calendar.TUESDAY:
                return "Prolina";
            case Calendar.WEDNESDAY:
                return "Glutamina";
            case Calendar.THURSDAY:
                return "Lisina";
            case Calendar.FRIDAY:
                return "Fenilalanina";
            case Calendar.SATURDAY:
                return "Histidina";
            default:
                throw new IllegalArgumentException("Dia inválido: " + dia);
        }
    }

    private void aguardar(int segundos) {
        try {
            long milissegundos = segundos * 1000;
            Thread.sleep(milissegundos);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
1 curtida

Staroski, grata pela ajuda. Vou fazer os testes aqui.

Staroski, fiz os testes, mais perdoe a minha ignorância. Ao testar, realmente, atualiza os segundos, porém, eu queria que aparecesse apenas uma vez e o relógio com os segundos dinamico. Ao testar a sua sugestão aparecem vários resultados um a baixo do outro.

O que eu estou tentando

08/08/2018 Quarta-feira
17:56:04 ( apenas os segundos mudando)
Opção da Semana: Glutamina
Opção da Hora: UI

Com a sua sugestão:

08/08/2018 Quarta-feira
18:01:55
Opção da Semana: Glutamina
Opção da Hora: LRT
08/08/2018 Quarta-feira
18:01:56
Opção da Semana: Glutamina
Opção da Hora: LRT
08/08/2018 Quarta-feira
18:01:57
Opção da Semana: Glutamina
Opção da Hora: LRT
08/08/2018 Quarta-feira
18:01:58
Opção da Semana: Glutamina
Opção da Hora: LRT

Em puro Java você não vai conseguir atualizar somente a linha de texto das horas, são necessários recursos específicos do sistema operacional para fazer isso.

Para conseguir alterar posições específicas do console, você teria que implementar o programa em uma linguagem que gere código nativo para o seu sistema operacional.

O que você pode fazer é uma gambiarra específica pra cada sistema operacional.
No Windows por exemplo você pode chamar o comando CLS do DOS a cada iteração do loop para limpar toda a tela.
Isso só vai funcionar quando executar o programa em linha de comando, no console da IDE não vai funcionar

while (true) {
    limparTela();

    Date data = new Date();
    calendario.setTime(data);
    System.out.println(formatoData.format(data));
    System.out.println(formatoHora.format(data));

    String opcaoSemana = getOpcaoSemana(calendario);
    System.out.println("Opção da Semana: " + opcaoSemana);

    String opcaoHora = getOpcaoHora(calendario);
    System.out.println("Opção da Hora: " + opcaoHora);

    aguardar(1);
}

Implementação do método limparTela():

private void limparTela() {
    String nomeSistema = System.getProperty("os.name").toLowerCase();
    if (nomeSistema.contains("windows")) {
        try {
            ProcessBuilder processBuilder = new ProcessBuilder("cmd", "/c", "cls");
            processBuilder.inheritIO();
            Process process = processBuilder.start();
            process.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
1 curtida

Nossa, Staroski. Se não fosse essa dica eu iria perder o maior tempo com algo que não existe,pelo menos como eu imaginava. Muito obrigada

1 curtida