在等待Thread.join()时如何做某事

时间:2015-08-05 10:33:18

标签: java multithreading

当我的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");

        }

评论的行是"""我想做... 感谢。

2 个答案:

答案 0 :(得分:0)

将更改标签移动到“tFiltrando”主题。 * 您可以等待或执行任务,但不能同时执行。

*说实话,您还需要了解一件事:UI操作应该从UI线程完成。

所以我建议阅读SwingWorker。它应该对你有所帮助。

答案 1 :(得分:0)

有一种非常基本且简单的方法可以存档。 只需在

之前更改按钮的名称即可
tFiltrando.join(); 

您可以使用run()方法中的最后一行更改按钮的名称。 这对我有用,我希望这会对你有所帮助。