Jlayer中的Jlayer带有圆形加载条

时间:2014-03-25 16:34:12

标签: java swing jpanel jlayer

这是我用Jlayer制作一个圆形加载条的例子,但是现在图层在执行btnLoad.addActionListener()之后开始和停止,并在一段确定的计时器(4000)之后停止所以我的问题,我需要它单击按钮加载时启动 完成加载文件后停止!!!

  final WaitLayerUI layerUI = new WaitLayerUI();

       jlayer = new JLayer<JPanel>(this, layerUI);

        final Timer stopper = new Timer(4000,new ActionListener() {
              public void actionPerformed(ActionEvent ae) {
                layerUI.stop();
              }
            });
            stopper.setRepeats(false);
          if (!stopper.isRunning()) {
            stopper.start();
          }
        btnLoad.addActionListener(
          new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
              layerUI.start();
              DataManager dataManager = new DataManager();
              try {
        dataManager.loadFromFile("C:/Users/*****PC/Downloads/****.csv");
            } catch (Exception e) {

                e.printStackTrace();
            }
            }
          }
        );

1 个答案:

答案 0 :(得分:0)

您应该将文件加载到另一个Thread而不是Event Dispatch Thread。假设您的loadFromFile方法在加载文件之前就会阻塞,然后您可以隐藏该图层,但您必须隐藏在Event Dispatch Thread而不是您开始加载文件的新Thread。< / p>

删除你的计时器并用以下代码替换你的try块:

    try {
        new Thread(new Runnable(){
            public void run() {
                dataManager.loadFromFile("C:/Users/*****PC/Downloads/****.csv");
                EventQueue.invokeLater(new Runnable(){
                    public void run() {
                        layerUI.stop();
                    }
                });
            }
        }).start();
    } catch (Exception e) {
        e.printStackTrace();
    }