0

这是我使用 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();
            }
            }
          }
        );
4

1 回答 1

0

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

删除你的计时器并用这个替换你的 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();
    }
于 2014-03-25T16:51:32.800 回答