Pergunta

isso é melhor usar javax.swing.Timer dentro de um balanço de aplicativo em vez de usar java.util.Timer?

por exemplo:

Timer timer = new Timer(1000, e -> label.setText(new Date().toString()));
    timer.setCoalesce(true);
    timer.setRepeats(true);
    timer.setInitialDelay(0);
    timer.start();

ou

new java.util.Timer().scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            label.setText(new Date().toString());
        }
    }, 0, 1000);

existe alguma diferença entre este dois?

Foi útil?

Solução

A diferença:

Um java.util.Timer inicia a sua própria Thread para executar a tarefa.

Um javax.swing.Timer agenda tarefas para execução no EDT.

Agora. Swing é único thread.

Você deve acessar e modificar o Balanço componentes do EDT só.

Portanto, para fazer alterações para o GUI a cada X segundos, use o Swing timer.Para fazer o plano de negócios da lógica de usar o outro temporizador.Ou melhor, uma ScheduledExecutorService.

Urso de uma coisa muito importante na mente;se você passar um tempo no EDT ele não pode passar o tempo a atualizar o GUI.

Outras dicas

A principal diferença é que o javax.swing.Timer executa seu código no EDT, enquanto o java.util.timer é executado em uma thread separada.Devido a esse swing temporizadores são melhor utilizados se você está manipulando o GUI, de forma alguma.Embora se você preferir usar um tipo diferente de timer em seguida, você ainda pode invocar o código no EDT.

new java.util.Timer().scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
            label.setText(new Date().toString());
        }
    });
}, 0, 1000);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top