Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

calves_oliveira

Thread + Timer

Recommended Posts

Pessoal, não tenho conhecimento em Thread e em Timer mas consegui criar esses dois métodos porém está com um erro e não consigo resolver, a idéia é o seguinte: um classe manda uma jlabel para o método mostraLabel e ele chama o outro método desizaLabel os dois metodos abaixo vai apresentar a mensagem durante 3 segundos e dois deslizar para sair da tela.

Sei que tem um erro no loop do metodo deslizaLabel pois ele esta com loop infinito mas não consigo tirar… quero que ao jlabel deslizar até o fim do form ele finalize o Thread.

e também se alguém tiver alguma sugestão de como otimizar esse processo será bem vindo.

public void mostraLabel(JLabel lbl) {
        ActionListener action = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                tempo.stop();
                deslizaLabel(lbl);
            }
        };
        tempo = new Timer(3000, action);
        tempo.start();
    }

private void deslizaLabel(JLabel lbl){
    new Thread(){
        @Override
        public void run(){
            int x = 0;
            int y = lbl.getLocation().y;
            while(true){
                x++;
                if(x > lbl.getWidth()){
                    this.stop();
                }
                lbl.setLocation(x,y);
                try {
                    sleep(10);
                } catch (InterruptedException ex) {  }
            }
        }
    }.start();}
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Keven Augusto
      Primeiramente, bom dia/boa tarde/boa noite.
       
      Eu estou migrando de vez para o Linux e percebi que não possui nenhuma aplicação nativa de cronometro como a que estava acostumado a utilizar no Windows 10. Eu faço home office, então uso muito para gerir o tempo de trabalho diário e gostaria de utilizar no Ubuntu também. 
       
      Procurei na loja do sistema, mas não encontrei nenhum que me agradasse e, como estudante de Engenharia de Computação, pensei em fazer um simples que execute no terminal mesmo e possua as funções básicas que preciso: start, pause e reset.
       
      Porém, estava pensando e não aprendi ainda e não tenho a menor ideia de como faria para que fosse exibido no terminal o contador e ao mesmo tempo examinar o teclado para que pause a execução caso seja pressionada uma determinada tecla.
       
      Alguém teria alguma ideia de como possa fazer para isso?
       
      Eu pensei em iniciar um novo terminal via código mesmo e ir mostrando o contador neste outro terminal, aí no primeiro eu insiro os comandos para pausar, começar ou reiniciar o tempo. Penso que seja mais ou menos isso que preciso fazer, mas não tenho certeza e gostaria de uma luz.
    • Por rogerss_7
      Pessoal, estou participando do desenvolvimento de uma ferramenta com a minha equipe que fará, entre outras, coisas automatizadas por serviços.
       
      Neste contexto eu comecei a notar que algumas estratégias poderiam ser diferentes, como por exemplo processamento paralelo, coisa esta que não está acontecendo.
       
      Vou tentar dar exemplos sem poder mostrar trechos de código reais, pois existem contratos de confidencialidade que poderiam nos levar a multas ou rescisão, acho que vocês entenderão.
       
      1 - Suponha que eu tenha X usuários (logins);
      2 - Pra cada usuário eu tenho que verificar se tem e-mails pra enviar ou arquivos pra processar, entre outros etc.;
       
      // Implementação hipotética
      1 - Existe uma List<Logins> que é iterada por um foreach básico;
      2 - Dentro deste foreach são chamadas as ações que podem acontecer pra cada usuário, mais ou menos assim:
      foreach (var login in logins) {     if (!await _servicoLoginInjetado.LogIn(login))     {         continue;     }     await _servicoLoginInjetado.MandarEmail();     await _servicoLoginInjetado.ProcessarArquivos();     await _servicoLoginInjetado.FazerOutraCoisa(); } É possível notar que existe uma predisposição para async, porém o código não é nada performático, pois itera um a um, não existe paralelismo.
       
      As informações do login (logado) ficam internamente no objeto retornante de _servicoLoginInjetado ... talvez isto também esteja errado.
       
      Gostaria de trocar experiências de possíveis melhorias com vocês.
    • Por MateusOFCZ
      Olá, eu criei uma página de publicidade, porém não fluiu como eu queria, então coloquei essa página em uma DIV, alguém poderia me informar se irá funcionar caso eu faça um sistema para ocultar essa DIV depois de 10 segundos?
      <!--- Publicidade ------> <div id="publicidadediv"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title><?= $config['hotelName'] ?> - Publicidade</title> <script src="/templates/GalaxyServers/client/js/jquery-latest.js" type="text/javascript"></script> <script src="/templates/GalaxyServers/client/js/jquery-ui.js" type="text/javascript"></script> <script src="/templates/GalaxyServers/client/js/spacehotel2018.js"></script> <script src="/templates/GalaxyServers/client/js/flash_detect_min.js"></script> <script src="/templates/GalaxyServers/client/js/client.js" type="text/javascript"></script> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"> <link rel="icon" type="image/png" href="<?= $config["favicon"];?>"> </head> <body> <body style="background-color:black;"> <center><img src="https://i.imgur.com/kHdzpqq.png" style="width:396px;height:91px;"></center> <center><?php $imagens = array(); $imagens[] = '<a href="https://hobbyhotel.club/hotel?room=255" target="_blank"><img src="https://i.imgur.com/O0gSito.png" style="width:330px;height:250px;"></a>'; $imagens[] = '<a href="https://hobbyhotel.club/hotel?room=255" target="_blank"><img src="https://i.imgur.com/O0gSito.png" style="width:330px;height:250px;"></a>'; $chave = array_rand($imagens); $imagem = $imagens[$chave]; echo $imagem; ?></center> <center><img src="https://i.imgur.com/9FH4A5O.png" style="width:396px;height:91px;"></center> </body> </div> <!--- Publicidade ------> Gostaria de sabem também como faço para ocultar tudo isso após X segundos...
    • Por Mayara Andres
      Olá, preciso implementar um código java usando threads, como o anunciado da atividade pede: 
       
      "O trabalho consiste em alterar o código que busca valores dentro de um vetor (disponível no blackboard) de forma a criar N threads de acordo com a vontade do usuário (ler o número de threads que o usuário deseja criar) e buscar um valor no vetor (apenas 1, também inserido pelo usuário) de forma paralela, ou seja, cada thread criada deve procurar por um região diferente do vetor. Ao final da execução mostre qual foi a thread que encontrou o valor."
       
      PS: EU SÓ QUERO SABER POR ONDE EU COMEÇO, A LÓGICA EU ENTENDI, SÓ NÃO SEI COMO FAZER. 

      classe thread_busca
       
      package trabalho_thread; import java.util.logging.Level; import java.util.logging.Logger; class ThreadBusca extends Thread { private int vetor[]; private int numeroProcurar; public ThreadBusca(int[] vet, int numeroProcurar) { this.vetor = vet; this.numeroProcurar = numeroProcurar; } @Override public void run() { for (int i = 0; i < vetor.length; i++) { if (vetor[i] == numeroProcurar) { System.out.println("Indice de "+numeroProcurar+" eh "+i); return; } try { Thread.sleep(10); } catch (InterruptedException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } } System.out.println("Indice de "+numeroProcurar+" eh -1"); } } classe main
      package trabalho_thread; import java.util.Arrays; import java.util.Random; import javax.swing.JOptionPane; public class Main { public static void main(String[] args) { int vet[] = new int[200]; Random random = new Random(); for(int i=0;i<200;i++){ vet[i] = random.nextInt(4999)+1; } System.out.println(Arrays.toString(vet)); int numero=-1; do{ numero = Integer.parseInt(JOptionPane.showInputDialog("Numero a pesquisar:")); new ThreadBusca(vet, numero).start(); }while(numero>0); } }  
    • Por Luis Fernando R. Valle
      Tenho o seguinte código que faz a pesquisa no servidor:
       
      function GetHTTP(sURL) {
          var retorno;
          $.ajax({
              url: sURL,
              type: 'GET',
              async: false,
              cache: false,
              timeout: 30000,
              error: function () {
                  console.info("Error");
              },
              success: function (result) {
                  //console.info(result);
                  retorno = result;
              }
          });
          return retorno;
      }
       
       
       
      chamada da função:
      var retorno = GetHTTP(base_url + "json/arquivo.php?dados=" + dados);
       
      Esta função grava mensagem enviada pelo cliente e retorna uma resposta do servidor tmb, tudo ao mesmo tempo.
      Precisava dar um delay do que o cliente envia para a outra resposta que é enviada pelo servidor.
       
      Desde já agradeço.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.