2015-08-05 2 views
0

Я пытаюсь что-то сделать, пока мой поток ждет метода join() все, что я хочу сделать, это изменить только имя кнопки, пока жду, но это не работает ... и я не знаю, почему вот мой ужасный код:как сделать что-то, пока вы ждете Thread.join()

if(e.getSource()==botonFiltro){ 
      double [] datosFiltro2 = { 
        (Double.parseDouble(montoTextField.getText())),//0monto 
        (Double.parseDouble(txtPorcentaje.getText())/100),//1porcentaje 
        (Double.parseDouble(txtPrecio.getText())),//2precio 
        (Double.parseDouble(txtRango.getText())/100),//3rango 
        (Double.parseDouble(txtPMasDuro.getText())/100)//4pMasDuro 
        }; 
      double [] datosFiltro1= {}; 
      botonFiltro.setText("Filtrando"); 
      HiloLanzarFiltro hilo = new HiloLanzarFiltro(programa, datosFiltro1, datosFiltro2); 
      Thread tFiltrando = new Thread(hilo); 
      tFiltrando.start(); 
      try { 
//    while(tFiltrando.isAlive()){ 
//     botonFiltro.setText("Filtrando."); 
//     Thread.sleep(500); 
//     botonFiltro.setText("Filtrando.."); 
//     Thread.sleep(500); 
//     botonFiltro.setText("Filtrando..."); 
//     Thread.sleep(500); 
//    } 
       tFiltrando.join(); 
      } catch (InterruptedException e1) { 
//    
      } 
      this.programa= hilo.getPrograma(); 
      String[] l = new String[programa.getCompañias().size()]; 
      int i= 0; 
      for(Compañia c: programa.getCompañias()){ 
       l[i++]=c.getSymbol(); 
      } 
      JListaPrincipal.setListData(l); 
      lblCompaiasEncontradas.setText("Compa\u00F1ias encontradas: "+programa.getCompañias().size()); 
      botonFiltro.setText("Filtrar"); 

     } 

комментируемые линии являются «вещью», что я хотел сделать ... Спасибо.

+0

См. Https://docs.oracle.com/javase/tutorial/uiswing/concurrency/simple.html – Fildor

+1

Вы должны иметь возможность использовать 'join (long millis)'. – OldCurmudgeon

+0

«Делайте что-нибудь, пока вы ждёте» - это противоречие в терминах. 'Thread.join()' - операция блокировки. Вы заблокированы. Вы ничего не можете сделать. – EJP

ответ

0

Переместите сменную метку на резьбу «tFiltrando». * Вы можете либо ждать, либо выполнять задачи, ни то, и другое.

* Если честно, есть и одно, что вам нужно понять: манипулирование пользовательским интерфейсом должно выполняться из потока пользовательского интерфейса.

Поэтому я предлагаю прочитать около SwingWorker. Это должно вам очень помочь.

+0

Спасибо, да, это мой первый раз, пытаясь с этим ... –

+0

SwingWorker звучит отлично, я пытался сделать что-то с этим, но я не могу заставить «botonFiltrado» сделать «анимацию» вроде «... ..» вы знаете? например, он делает что-то важное ... он все еще ждет SwingWorker .... –

+0

Вы использовали метод publish() для отправки изменений состояния в поток пользовательского интерфейса? Вы переопределили метод process(), чтобы использовать эти изменения и что-то делать с компонентами пользовательского интерфейса? – cichystefan

0

Существует очень простой и простой способ архивирования этого. Просто измените имя кнопки перед

tFiltrando.join(); 

И вы можете изменить название кнопки, используя последнюю строку в методе Run(). Это работает для меня, надеюсь, это поможет вам.

+0

Я пробовал, но это не меняет его ... –

+0

@YagoRodriguez Вы попробовали переставить фрейм или перекрасить апплет, который подходит для вашего приложения. В большинстве случаев вам необходимо обновить fraes, чтобы изменить ui в java SE. – Kamidu

Смежные вопросы